Структура C(++) вызывает дополнительное заполнение

Я видел бесчисленное количество вопросов в форме «Мне не нравится дополнение, как его отключить», но еще не нашел ничего о том, чтобы заставить компилятор предоставить дополнительное дополнение. .

Конкретный случай, который у меня есть, выглядит так

struct particle{
  vect2 s;
  vect2 v;
  int rX;
  int rY;
  double mass;
  int boxNum;
};

Где vect2— простая struct {double x; двойной у;} вектор2. Чтобы использовать SSE2, мне нужно иметь возможность загрузить пару двойников, выровненных по 16-байтовым границам. Раньше это работало, пока я не добавил дополнительный int, увеличив размер моей структуры с 48 до 56 байт. Результат - сегфоулты.

Могу ли я использовать какую-либо директиву компилятора, которая либо говорит: «дополнить эту структуру, чтобы она была кратной 16 байтам», либо «эта структура имеет выравнивание по 16 байтам»? Я знаю, что мог бы сделать это вручную (например, добавив дополнительный символ [12]), но я бы предпочел просто сказать компилятору (GCC, предпочтительно совместимый с ICC), и мне не нужно делать это вручную, если я изменю структура в будущем.

9
задан zebediah49 22 June 2012 в 16:41
поделиться