Мне было интересно, будет ли компилятор использовать разные отступы в 32-битных и 64-битных системах, поэтому я написал следующий код в простом консольном проекте VS2019 C++:
struct Z
{
char s;
__int64 i;
};
int main()
{
std::cout << sizeof(Z) <<"\n";
}
Что я ожидал от каждой настройки "Платформа":
x86: 12
X64: 16
Фактический результат:
x86: 16
X64: 16
Поскольку размер слова памяти в x86 составляет 4 байта, это означает, что он должен хранить байты i
в двух разных словах. Поэтому я подумал, что компилятор сделает заполнение таким образом:
struct Z
{
char s;
char _pad[3];
__int64 i;
};
Так я могу знать, в чем причина этого?
- Для прямой совместимости с 64-битной системой?
- Из-за ограничения поддержки 64-битных чисел на 32-битном процессоре?