Различия в размере структуры ( c++)

312
26 июля 2017, 22:56

Вставляю код

struct Person
{ 
    int n; char name[10]; 
} p;

Потом узнаю размер структуры. sizeof(p); после чего результат - 16. Почему так? Сколько char же занимает 1 байт, 10 сhar занимают 10 байт. int же занимает 4 байта, а структура 1 байт? Откуда ещё 1 байт?

Answer 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

Хотя структуры функционально одинаковы, выравнивание применено разное...

READ ALSO
Компиляция obs-studio (не найден FFmpeg)

Компиляция obs-studio (не найден FFmpeg)

Я решил скомпилировать программу obs-studio (я использовал clion), но при сборке cmake-а возникает ошибка:

302
Ошибка компиляции async Qt в macOS

Ошибка компиляции async Qt в macOS

Заметил, что Qt не компилирует пример с async

311
FindWindowA не находит название окна на русском языке

FindWindowA не находит название окна на русском языке

Если str английская, вроде все нормальноА вот на русском не находит окно:

277
Выбор элементов от и до jQuery

Выбор элементов от и до jQuery

В общем, есть div с произвольным количеством дочерних div-овНужно реализовать выбор/мультивыбор дочерних div (на подобии выбора файлов в проводнике)

412