170 похожих чатов

Здраствуйте. Помогите разобраться: вот класс class Animal { public: Animal(); ~Animal();

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 берутся? С методов? С каких?

24 ответов

17 просмотров

указатель в х64 равняется не 4, а 8 байтам. И емнип за счет выравнивания добавляется ещё 4 байта к инту.

выравнивание, плюс указатель у вас весит не 4 а 8 скорее всего

32 битный указатель весит 4 байта, а 64 битный - 8 байт. В этом суть 32 и 64 битной ос

pahole, либо в gdb ptype /o ответят на все вопросы о лэйауте структуры в конкретной программе

Можно поменять местами инт и указатель и получить 12

Maus Grau
Почему?

потому что структура выравнивается как самый выравненный из её членов

Stepan Zorin
с чего это?)

Попробуй, посмотрим, может и реально нельзя)

Maus Grau
Я про sizeof

...а sizeof в свою очередь добивается до кратности выравниванию, чтобы массивы работали (кроме дефекта с enum)

Maus Grau
Да, нельзя(

попробуй оптимизацию задрать в потолок?)) Я не удивлюсь, если компилятор поведет себя по-другому))

Maus Grau
Там есть атрибут для пакет структур

ну если есть - тогда наверное не будет)

Maus Grau
Там есть атрибут для пакет структур

вообще должен, например я хочу упаковать данные в mmap файл, чтобы не жрал место, с чего бы ему увеличивать тогда размер, если я проставил аттрибутом?)

Maus Grau
Да, размер 12)

ну я просто делал октодеревья по 200гигов на диск укладывал, правда на C#)) Если уж C# позволяет - я думаю С++ и подавно

Не это тебя должно было волновать, а UB от неинициализированной переменной

Denis- Автор вопроса
Ilya Zviagin
Не это тебя должно было волновать, а UB от неиниц...

это кусок кода, инициализирую в конструкторе

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта