Я просто пытался проверить, как память распределена для объектов структуры, и занимает больше места, что я ожидал. Я использую 64-битные ОС Windows и визуальную студию Microsoft 2010 (я думаю, ее 32-разрядная версия), поэтому можно объяснить, почему ее печать 52 байта?
struct test {
int year;// should take 4 byte
string title;// how much bytes would take ? in my case taking 31 bytes ?
double date;//should take 8 byte
int month;// should take 4 byte
} mine;
int main ()
{
cout << " size is: "<<sizeof(mine);//printing 52 ?
cout << " size is: "<<sizeof(struct test);//printing 52 ?
return 0;
}
Обратите внимание, что
sizeof(struct) >= sizeof(its members)
Поскольку каждый член может быть выровнен по нижнему адресу после предыдущего элемента, который удовлетворяет:
mod(address/sizeof(member)) == 0
Например, рассмотрим эту struct
:
struct s {
char c;
int i[2];
double d;
}
Память может выглядеть так:
+-------------------------------------------------+
| c | | | | i[0] | i[1] | | | | | .. v .. |
+-------------------------------------------------+
^ ^ ^ ^ ^ ^ ^
string
=std::string
или что? Если это пользовательский класс / структура, вы должны опубликовать урезанную версию применимого класса (он не должен содержать больше, чем переменные - никаких функций не требуется).