X86は位置合わせなしで動作しますが、データが位置合わせされているとパフォーマンスが向上します。タイプの配置は、通常sizeof(type)で、最大16(バイト)です。
私は念のためにこのばかげたテストプログラムを作成しました(mallocはそれが何をしているのかを知っていると思います)、そしてそれは私のamd64ボックスに16を返します。32ビットモードでコンパイルすると8を返します。
#include <stdlib.h>
#include <stdio.h>
int main() {
int i;
unsigned long used_bits = 0, alignment;
for (i = 0; i < 1000; ++i) {
used_bits |= (unsigned long)malloc(1); /* common sizes */
used_bits |= (unsigned long)malloc(2);
used_bits |= (unsigned long)malloc(4);
used_bits |= (unsigned long)malloc(8);
used_bits |= (unsigned long)malloc(16);
used_bits |= (unsigned long)malloc(437); /* random number */
}
alignment = 1;
while (!(used_bits & alignment)) {
alignment <<= 1;
}
printf("Alignment is: %lu\n", alignment);
return 0;
}