alignof оператор С++11

Оператор alignof возвращает количество байт (тип size_t) требуемых для выравнивания типа данных переданных ему как аргумент. Возвращаемый результат оператора alignof совпадает с размером данного типа в байтах (возвращаемый функцией sizeof ), для char это 1, short - 2, int - 4, double - 8 и т.д.


#include <iostream> // cout, endl
using namespace std;
int main(){
    cout << alignof(char)   << endl; // 1
    cout << alignof(short)  << endl; // 2
    cout << alignof(int)    << endl; // 4
    cout << alignof(float)  << endl; // 4
    cout << alignof(double) << endl; // 8
}

Компилятор не может менять порядок расположения переменных в классах и структурах и выравнивает переменные как правило по границе 4 байта и порядок расположения переменных влияет на выравнивание и размер структур и классов. Пример программы демонстрирующий различный размер вроде бы одинаковых структур приведен ниже.


#include <iostream> // cout, endl
using namespace std;
struct st_align{ // Структура с выравненными данными
    double b;
    int a;
    int c;
};

struct st_not_align{ // Структура с невыравненными данными
    int a;
    double b;
    int c;
};

int main(){
    cout << "size st_align = " << sizeof (st_align) << endl;         // Выводим размер выравненной структуры   16
    cout << "size st_not_align = " << sizeof (st_not_align) << endl; // Выводим размер невыравненной структуры 24
}
/* Вывод программы:
size st_align = 16
size st_not_align = 24 
*/
2023-10-22



Понравилась страница?
Добавить в закладки
Или поделиться!

Связанные темы

alignas спецификатор выравнивания данных в памяти С++
alignof оператор С++11 возвращает количество байт требуемых для выравнивания типа данных
nullptr C++ значение для нулевого указателя
Стек и куча в С++