sizeof
От: R!M  
Дата: 07.01.03 12:58
Оценка:
Всем привет.

Вопрос следующий:
Это нормально что sizeof(от одного класса) != sizeof(от другого), при условии того что оба класса имеют
а)одинаковое количество переменныых
б)переменные одного и тогоже типа
?

Заранее благодарю.
R!M
Re: sizeof
От: m.a.g. Мальта http://dottedmag.net/
Дата: 07.01.03 13:17
Оценка:
Здравствуйте, R!M, Вы писали:

R!M>Вопрос следующий:
R!M>Это нормально что sizeof(от одного класса) != sizeof(от другого), при условии того что оба класса имеют
R!M>а)одинаковое количество переменныых
R!M>б)переменные одного и тогоже типа
R!M>?

Вполне, здесь могут влиять выравнивание и наличие/отсутствие виртуальных функций.
... << Машина времени [] Избавление >> ...
Re: sizeof
От: Кодт Россия  
Дата: 07.01.03 13:18
Оценка: 6 (1)
Здравствуйте, R!M, Вы писали:

R!M>Это нормально что sizeof(от одного класса) != sizeof(от другого), при условии того что оба класса имеют
R!M>а)одинаковое количество переменныых
R!M>б)переменные одного и тогоже типа
R!M>?

Да, если включено выравнивание (pragma pack). А по умолчанию оно делается или на 4, или на 8 байт.
(ищи на форуме pragma pack ).
Разный размер будет как при разных значениях выравнивания, так и при одинаковых, но разном порядке полей:
struct A
{
  char a1,a2,a3,a4;
  long a5,a6,a7;
};
//  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
// a1 a2 a3 a4 a5.++.++.++ a6.++.++.++ a7.++.++.++

struct B
{
  char b1;
  long b5;
  char b2;
  long b6;
  char b3;
  long b7;
  char b4;
};
//  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
// b1 -- -- -- b5.++.++.++ b2 -- -- -- b6.++.++.++ и так далее
//    выравнено               выравнено


Также не забывай о скрытых полях: указатели на таблицы виртуальных методов, виртуальные предки.
class A
{
  int a;
};

class B
{
  int b;
  //VMT_of_B* pVMT;

  virtual ~B() {}
};

class A
{
  int a1, a2, a3;
};

class B : public A
{
  //A ancestor;
  int b;
};

class C : public virtual A
{
  //A* pAncestor;
  int c;
};
Перекуём баги на фичи!
Re: sizeof
От: cpp Россия http://www.elecard.com
Дата: 08.01.03 03:54
Оценка:
Здравствуйте, R!M, Вы писали:

R!M>Всем привет.

R!M>Вопрос следующий:
R!M>Это нормально что sizeof(от одного класса) != sizeof(от другого), при условии того что оба класса имеют
R!M>а)одинаковое количество переменныых
R!M>б)переменные одного и тогоже типа
R!M>?

R!M>Заранее благодарю.

Где-то был пост про это.
Если ты поменял местами переменные в этих двух классах, то в зависимости от их размера sizeof может измениться, т.к. данные выравниваются по 4 байта, а sizeof считается от общего занятого места под структуру.
Сергей.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.