Обновить

Простой способ вычислить размер структуры/класса

Возьмем такой объект:

struct Object {
    bool b;     // std::alignment_of<bool>::value == 1
    double d;   // std::alignment_of<double>::value == 8
    int i;      // std::alignment_of<int>::value == 4
    char c;     // std::alignment_of<char>::value == 1
};

В комментарии к каждому типу данных указано требование к его выравниванию в памяти процесса на примере архитектуры x86_64 (спасибо Coder007 за комментарий). Не путать с размером типа данных. Начнем с первого поля структуры с типом bool – поместим его по нулевому адресу на импровизированной линейке памяти где каждая клетка занимает один байт (рис. 1).

У следующего поля типа double значение выравнивания 8, т.е. его начало должно располагаться на кратном 8 адресе памяти (рис. 2).

Для int с выравниваем 4 ближайший кратный 4 адрес это 16 (рис. 3).

А для char по той же схеме поставим его по адресу 20 (рис. 4).

Но это не все. Если допустить, что размер структуры 21 байт, то следующая такая же структура Object будет располагаться следом - по адресу 21. Для ее поля типа bool допустимо находиться на 21-й позиции, однако тогда поле типа double будет уже 29-й, которая не кратна 8, т.е. нарушится правило выравнивания (рис. 5).

Для данного примера наиболее простой способ разместить в памяти все объекты и при этом учесть их выравнивание это добавить в конец структуры 3 байта (рис. 6).

Таким образом, размер структуры равен 24 байта. Если хотите уменьшить ее размер, то придется переставить поля.

Теги:
+3
Комментарии6

Нейросети как дофаминовая яма для взрослых

Раньше существовал естественный барьер между «мне интересно» и «я пошёл это делать». Чтобы попробовать написать музыку, нужно было хотя бы немного разобраться в DAW. Чтобы полезть в SEO, требовалось прочитать документацию, собрать инструменты, понять терминологию. Чтобы сделать сайт на WebGL, сначала неплохо было научиться оптимизировать такие сайты.

Теперь этот барьер почти исчез. И неожиданно оказалось, что это не только преимущество…

Нейросети как дофаминовая яма для взрослых

Публикации