Я использую C ++, и у меня есть следующие структуры:
struct ArrayOfThese {
int a;
int b;
};
struct DataPoint {
int a;
int b;
int c;
};
В памяти я хочу иметь 1 или несколько элементов ArrayOfThese в конце каждой DataPoint. В DataPoint не всегда одинаковое количество элементов ArrayOfThese.
Поскольку у меня смешное количество точек DataPoints, которые нужно собрать и затем передать по сети, я хочу, чтобы все мои точки DataPoints и их элементы ArrayOfThese были смежными. Потеря места для фиксированного числа элементов ArrayOfThese недопустима.
В C я бы сделал элемент в конце DataPoint, который был объявлен как ArrayOfThese d[0];
, выделил DataPoint плюс достаточно дополнительных байтов для любого количества элементов ArrayOfThese, которые у меня были, и использовал бы фиктивный массив для индексации в них. (Конечно, количество элементов ArrayOfThese должно быть в поле DataPoint.)
В C ++ использование размещения новых и того же массива 0 длины взламывает правильный подход? Если это так, гарантирует ли размещение новых, что последующие вызовы новых из того же пула памяти будут распределяться непрерывно?