Учитывая код и его вывод ниже
#include <cstdint>
#include <iostream>
using std::cout;
using std::endl;
class alignas(8) Something {
std::uint8_t integer{};
};
int main() {
auto something = Something{};
auto character = std::uint8_t{};
cout << sizeof(something) << endl;
cout << reinterpret_cast<std::uintptr_t>(&something) << endl;
cout << reinterpret_cast<std::uintptr_t>(&character) << endl;
}
https://wandbox.org/permlink/m6D0PYWyrGlfjYJP. Вывод из одного прогона
8
140729604143976
140729604143975
Если у меня есть структура, которая выровнена по 8 байтоввызов sizeof
округляет размер структуры до ближайшего кратного ее выравнивания.Но компилятор все еще может помещать объекты в это гипотетическое пространство, оставленное с округленным размером.
В каких случаях это разрешено?Это всегда разрешено?Почему sizeof
округляет размер здесь, если он не соблюдается?