Вставляю код
struct Person
{
int n; char name[10];
} p;
Потом узнаю размер структуры. sizeof(p); после чего результат - 16. Почему так? Сколько char же занимает 1 байт, 10 сhar занимают 10 байт. int же занимает 4 байта, а структура 1 байт? Откуда ещё 1 байт?
Ответ прост - выравнивание. Компилятор выравнивает в памяти поля структуры так, чтобы обеспечить максимальное быстродействие (или обеспечить выполнение затребованного ключами компилятора выравнивания :))
Вот такой код (VC++ 2015)
#include <iostream>
#include <iomanip>
using namespace std;
#pragma pack(8)
struct Person1
{
int n; char name[10];
} p1;
#pragma pack(1)
struct Person2
{
int n; char name[10];
} p2;
int main()
{
cout << sizeof(p1) << endl;
cout << sizeof(p2) << endl;
}
А вот его вывод:
16
14
Хотя структуры функционально одинаковы, выравнивание применено разное...
Сборка персонального компьютера от Artline: умный выбор для современных пользователей