По мотивам Неверное выравнивание начатого pavlick
Возьмём такой код на C:
#include <stdio.h>
#include <stdalign.h>
int main() {
printf("alignof(double) == %u\n", alignof(double));
}
Возьмём компилятор:
% gcc --version
gcc (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Скомпилируем и запустим (ВНИМАНИЕ! 32 БИТА!):
% gcc -march=i686 -m32 -std=c11 -o test-c test-c.c
% ./test-c
alignof(double) == 4
Теперь возьмём такой код на C++:
#include <iostream>
int main() {
std::cout << "alignof(double) == " << alignof(double) << '\n';
}
Компилятор:
% g++ --version
g++ (Ubuntu 4.9.2-0ubuntu1~14.04) 4.9.2
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Запускаем:
% g++ -march=i686 -m32 -std=c++11 -o test-cpp test-cpp.cc
% ./test-cpp
alignof(double) == 8
Итак, почему выравнивание разное?
P.S. В x86_64 в обоих случаях будет 8.