Как распределить структуры переменного размера в памяти? - PullRequest
3 голосов
/ 26 октября 2009

Я использую 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 длины взламывает правильный подход? Если это так, гарантирует ли размещение новых, что последующие вызовы новых из того же пула памяти будут распределяться непрерывно?

Ответы [ 11 ]

0 голосов
/ 26 октября 2009

Не могли бы вы превратить их в классы с одним и тем же суперклассом, а затем использовать ваш любимый контейнер stl по выбору, используя суперкласс в качестве шаблона?

...