Компилятор не только использует стек для хранения ваших локальных переменных - он также использует его, например, для передачи аргументов, а также некоторые накладные расходы, вызванные std::cout
.Вероятно, именно для этого используется дополнительный пробел между вашими переменными.
Если вместо этого вы сделаете свои переменные static
, например:
static CExample ce;
static CExample ce2;
static CExample ceArr[2];
... переменные будут помещены вВместо этого BSS, и выравнивание, скорее всего, будет тем, что вы ожидаете.
Причина, по которой массивы упакованы, а отдельные элементы нет, выясняется другими ответами ...