Сообщение 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:
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:
Так получатся опять же из-за массивов. Расстояние между элементами равно sizeof по определению, а если sizeof не будет кратен alignof, то в массиве появятся элементы с нарушением выравнивания. И поэтому для всех типов, которые могут быть элементами массива, должно такое свойство выполняться.
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, то в массиве появятся элементы с нарушением выравнивания. И поэтому для всех типов, которые могут быть элементами массива, должно такое свойство выполняться.