void setAge(int age) { itsAge = age; };
int getAge() const { return *p_itsAge; };
void getAgeAdress() { std::cout << p_itsAge << std::endl;}
private:
int itsAge;
int* p_itsAge;
};
мне непонятно, как этот класс занимает 16 байт.
Понятно, что itsAge, p_itsAge по 4 байта, где ещё 8 берутся? С методов? С каких?
указатель в х64 равняется не 4, а 8 байтам. И емнип за счет выравнивания добавляется ещё 4 байта к инту.
выравнивание, плюс указатель у вас весит не 4 а 8 скорее всего
32 битный указатель весит 4 байта, а 64 битный - 8 байт. В этом суть 32 и 64 битной ос
pahole, либо в gdb ptype /o ответят на все вопросы о лэйауте структуры в конкретной программе
Можно поменять местами инт и указатель и получить 12
Почему?
потому что структура выравнивается как самый выравненный из её членов
Попробуй, посмотрим, может и реально нельзя)
...а sizeof в свою очередь добивается до кратности выравниванию, чтобы массивы работали (кроме дефекта с enum)
это стоило сделать до :)
есть ещё обманка со string такая))
попробуй оптимизацию задрать в потолок?)) Я не удивлюсь, если компилятор поведет себя по-другому))
Там есть атрибут для пакет структур
ну если есть - тогда наверное не будет)
вообще должен, например я хочу упаковать данные в mmap файл, чтобы не жрал место, с чего бы ему увеличивать тогда размер, если я проставил аттрибутом?)
ну я просто делал октодеревья по 200гигов на диск укладывал, правда на C#)) Если уж C# позволяет - я думаю С++ и подавно
Не это тебя должно было волновать, а UB от неинициализированной переменной
это кусок кода, инициализирую в конструкторе
Обсуждают сегодня