Строка кода стоит тысячи слов:) Вот моя проблема:
/* Platform specific 16-byte alignment macro switch.
On Visual C++ it would substitute __declspec(align(16)).
On GCC it substitutes __attribute__((aligned (16))).
*/
#define ALIGN_16 ...
struct ALIGN_16 A {...};
A* ptr = new A;
A* ptr2 = new A[20];
assert(size_t(ptr) % 16 == 0);
for (int i=0; i<20; ++i)
assert(size_t(ptr2+i) % 16 == 0);
assert(sizeof(A) % 16 == 0);
Можно ли ожидать, что все утверждения пройдут на платформах с поддержкой SSE? Спасибо.
ИЗМЕНИТЬ. Частичный ответ. Я провел некоторое тестирование с VS2008, GCC и ICC. MS-компилятор выполнил выравнивание ptr и ptr2, но GCC и ICC не смогли выровнять ptr2.