2014-10-04 6 views
1

В качестве объекта этого примера классаСколько памяти выделено объекту этого класса?

class example 
{ 
public: 
    int x; 
} 

объект будет выделено 4 байт памяти. Поскольку int принимает 4 байта.

Сколько памяти будет выделено на объект следующего класса -

class node 
{ 
public: 
    int data; 
    node *prev, *next; 
}; 

ИНТ бы четыре байта, а как насчет «следующего» и указатели «назад»? Как насчет общего размера объекта класса?

+2

Почему бы вам не узнать с 'sizeof'? –

+0

Этот вопрос слишком широк, потому что, в принципе, любое натуральное число могло бы использоваться в качестве ответа на этот вопрос. В стандарте не указывается размер примитивных типов. Это зависит от реализации. Используйте 'sizeof' и узнайте о дополнении. – Shoe

ответ

1

Общий размер объекта sizeof(int) + 2*sizeof(node*) + любой набивка компилятор мог бы добавить между членами. Использование sizeof(node) - единственный портативный и надежный способ узнать это.

-2

Указатели имеют размер 4 байта в системе x86 или 8 байтов в системе x64.

Таким образом, ваш общий размер node составляет 4 + 4 + 4 или 4 + 8 + 8, что составляет 12 байт на архитектуре x86 или 20 байтов на архитектуре x64.

Из-за дополнения, однако, на архитектуре x64 фактический размер класса будет 24 байта, так как для архитектуры x64 требуется 8-байтовое выравнивание.

Как отметил Оливер Charlesworth, вы также можете сделать std::cout << sizeof(node) << "\n";, которая сообщит вам точный размер узла класса

+3

'int' is * not * 8 байтов на большинстве компиляторов x64. Кроме того, этот ответ не учитывается. –

+0

отредактировал, спасибо за разъяснение – Creris

+1

Правильный ответ заключается в том, что он зависит от реализации. Попробуйте угадать, что система OP бесполезна. – Shoe

Смежные вопросы