добрый день.
вот возник такой вопрос.
Есть некий класс
class A
{
public:
A(){}
virtual ~A(){}
void f(){}
virtual void vf(){}
private:
int m_n;
char *m_p;
};
А а;
sizeof(a) = sizeof(int) + sizeof(char*) + vtable. и того 12.
но почему если в в классе заменить int на double то в sizeof(a) получим 24
вить разница должна быть 4 байта почему 12????
Исправлено форматирование. НИКОГДА не запихивайте длинный текст в блок [code]. — Кодт
Здравствуйте, Аноним, Вы писали:
А>sizeof(a) = sizeof(int) + sizeof(char*) + vtable. и того 12.
А>но почему если в в классе заменить int на double то в sizeof(a) получим 24 вить разница должна быть 4 байта почему 12????
Для double лучше использовать выравнивание 8, поэтому получается так:
struct impl {
void* vtable;
char gap1[4];
double d;
char* p;
char gap2[4];
};
А вообще это конечно же зависит от компилятора и ключей компиляции. Можешь сказать #pragma pack(4) перед структурой и все должно стать как ты хочешь, но производительность может быть хуже.
Аноним 604 пишет:
> А а;
> sizeof(a) = sizeof(int) + sizeof(char*) + vtable. и того 12.
> но почему если в в классе заменить int на double то в sizeof(a) получим 24 вить разница должна быть 4 байта почему 12????
Выравнивание на границу слов или двойных слов. Отключается в компиляторе.
Posted via RSDN NNTP Server 2.1 beta
Здравствуйте, Аноним, Вы писали:
А>но почему если в в классе заменить int на double то в sizeof(a) получим 24 вить разница должна быть 4 байта почему 12????
Если поискать, например, фразу "
что вернёт sizeofАвтор: Erop
Дата: 28.10.05
", то сразу и найдёшь...
Удачи...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском