Читать книгу Ссылки и указатели в C++: от основ к безопасности и современному коду - - Страница 69

ВОДА

Оглавление

Выравнивание данных подобно правилам парковки: как автомобили ставят на парковке с зазорами (padding), чтобы обеспечить быстрый и безопасный въезд и выезд, так и данные размещают с выравнивающими байтами, чтобы процессор мог эффективно их читать и записывать; без такого выравнивания возникают «пробки» в виде замедления работы или даже «аварии» – неопределённое поведение (undefined behavior).


Ещё пример с несколькими полями:

struct Complex {


char c1; // offset 0, size 1


double d; // alignof=8 → padding 7 байт, offset 8, size 8


char c2; // offset 16, size 1


int i; // alignof=4 → padding 3 байт, offset 20, size 4


// Общий align=8 → padding 4 байт в конце? Нет, sizeof=24 (кратно 8)


};


std::cout << "sizeof(Complex): " << sizeof(Complex) << " (24)" << std::endl;


"Реальный" размер: 1+8+1+4=14, но с padding 24. Оптимизируйте порядок: большие поля сначала.

Ссылки и указатели в C++: от основ к безопасности и современному коду

Подняться наверх