Так как мы не меняли никаких режимов трансляции, это означает, что в отладочном режиме по умолчанию компилятор работает следующим образом:
• для класса и структуры память выделяется совершенно одинаково;
• даже «пустой» класс занимает в памяти некоторое количество байтов; в данном случае — один;
• если в классе объявлено только одно поле, то памяти выделяется ровно столько, сколько занимает значение соответствующего типа в памяти;
• в Visual C++.NET 2003 размеры типов double и long double одинаковы и равны восьми;
• если в классе несколько полей, то выделяемый объем памяти кратен наибольшему размеру;
• метод в классе места не занимает.
Те же самые числа выдаются и в режиме трансляции Release. Однако при запуске той же программы в системе Borland С++ Builder 6 на экран выводятся другие значения:
structure 8
structure 1
structure 4
structure 4
structure 8
Empty class 8
char class 1
int class 4
long class 4
double class 8;
long double class 16; structure 16
char,long class 8; structure 8
char,long dbl class 24; structure 24
only method class 8; structure 8
int, method class 4; structure 4
Как видите, и в этой системе метод не занимает места в классе, однако для «пустого» класса выделяется аж 8 байт! Кроме того, кратность выделения памяти для нескольких полей равна 8, а тип long double занимает 16 байт. |