Предисловие: Провел ли мое исследование по выравниванию структуры.Посмотрел этот вопрос, этот один, а также этот один - но все еще не нашел мой ответ.
Мой актуальный вопрос:
Вот фрагмент кода, который я создал, чтобы прояснить мой вопрос:
#include "stdafx.h"
#include <stdio.h>
struct IntAndCharStruct
{
int a;
char b;
};
struct IntAndDoubleStruct
{
int a;
double d;
};
struct IntFloatAndDoubleStruct
{
int a;
float c;
double d;
};
int main()
{
printf("Int: %d\n", sizeof(int));
printf("Float: %d\n", sizeof(float));
printf("Char: %d\n", sizeof(char));
printf("Double: %d\n", sizeof(double));
printf("IntAndCharStruct: %d\n", sizeof(IntAndCharStruct));
printf("IntAndDoubleStruct: %d\n", sizeof(IntAndDoubleStruct));
printf("IntFloatAndDoubleStruct: %d\n", sizeof(IntFloatAndDoubleStruct));
getchar();
}
И вывод:
Int: 4
Float: 4
Char: 1
Double: 8
IntAndCharStruct: 8
IntAndDoubleStruct: 16
IntFloatAndDoubleStruct: 16
Я получаювыравнивание видно в IntAndCharStruct
и в IntAndDoubleStruct
.
Но я просто не понимаю IntFloatAndDoubleStruct
один .
Проще говоря: Почему не sizeof(IntFloatAndDoubleStruct) = 24
?
Заранее спасибо!
ps: я использую Visual-Studio 2017, стандартное консольное приложение.
Редактировать: По комментариям, проверено IntDoubleAndFloatStruct
(другой порядок элементов)и получил 24 в sizeof()
- и я буду рад, если ответы примут к сведению и объяснят этот случай тоже.