Информация об изменениях

Сообщение Re[3]: Размер массива, что сказано в стандарте от 06.12.2022 0:42

Изменено 06.12.2022 0:56 watchmaker

Re[3]: Размер массива, что сказано в стандарте
Здравствуйте, koenjihyakkei, Вы писали:

K>Например, если alignof(char) == 4 при sizeof(char) == 1.

Такого в С++ не бывает.


Если же ты имел ввиду не char, а например структуру, то компилятор при избыточном выравнивании скорректирует и sizeof:
struct alignas(64) S {
    char c;
};


static_assert(sizeof(S) >= 64 && sizeof(S) % 64 == 0);

// но скорее на практике будет просто выполняться
static_assert(sizeof(S) == 64);
Re[3]: Размер массива, что сказано в стандарте
Здравствуйте, koenjihyakkei, Вы писали:

K>Например, если alignof(char) == 4 при sizeof(char) == 1.

Такого в С++ не бывает.


Если же ты имел ввиду не char, а например структуру, то компилятор при избыточном выравнивании скорректирует и sizeof:
struct alignas(64) S {
    char c;
};


static_assert(sizeof(S) >= 64 && sizeof(S) % 64 == 0);

// но скорее на практике будет просто выполняться
static_assert(sizeof(S) == 64);

Так получатся опять же из-за массивов. Расстояние между элементами равно sizeof по определению, а если sizeof не будет кратен alignof, то в массиве появятся элементы с нарушением выравнивания. И поэтому для всех типов, которые могут быть элементами массива, должно такое свойство выполняться.