Что такое sizeof(salesman)
? Он говорит 48 байтов и нуждается в объяснении почему.
class customer {
char c;
double l;
int k;
};
class salesman: private customer{
int salno;
char salname[20];
protected :
float salary;
};
Что ж, сложно догадаться о компиляторе.
Но customer
может разумно потребовать 1 + 7 + 8 + 4 + 4 = 20 байт (7 и финал 4 - заполнение). Затем добавляется еще 4 + 20 + 4 = 28 для salesman
, и кажется, что компилятор достаточно умен, чтобы отбросить последние 4 байта заполнения от customer
при выполнении подкласса. Это 48!
Вышеизложенное предполагает, что sizeof (int)
и sizeof (float)
sizeof (double)
4, а sizeof (double)
- 8.
При следующих предположениях:
Размер char
равен 1 байт
Размер int
равен 4 байтам
Размер float
- 4 байта
Размер double
равен 8 байтам
Добавляется добавление, так что переменная размера N всегда будет находиться по адресу, делящемуся на N
Карта памяти экземпляра salesman
такова:
Byte 0 : char c;
Bytes 8-15: double l;
Bytes 16-19: int k;
Bytes 20-23: int salno;
Bytes 24-43: char salname[20];
Bytes 44-47: float salary;
Следовательно, общий размер экземпляра salesman
составляет 48 байт.
Обратите внимание, однако, что предположения, приведенные выше, не обязательно верны для каждого компилятора.
sizeof(customer)
равен 24, а не 20, что показывает, что размер полного типа не обязательно равен размеру строгого подобъекта того же типа.char
, а дляdouble
послеchar
.