我有这堂课:
class MyClass{
public:
shared_ptr<X> a;
shared_ptr<Y> b;
std::string c;
std::vector<double> d;
std::vector<shared_ptr<Z>> e;
int f;
};
当我使用开关在VS2012上编译以查看类布局时,我得到了这个:
1> class MyClass size(128):
1> +---
1> 0 | {vfptr}
1> 8 | ?$shared_ptr@VX@@ a
1> 24 | ?$shared_ptr@VY@@ b
1> 40 | ?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@ c
1> 72 | ?$vector@NV?$allocator@N@std@@ d
1> 96 | ?$vector@V?$shared_ptr@Z@@@boost@@V?$allocator@V?$shared_ptr@VZ@@@boost@@@std@@ e
1> 120 | f
1> | <alignment member> (size=4)
1> +---
它意味着数据成员c
是32个字节。
但是,如果我在我的平台(Win 7 64)上sizeof(std::string)
,使用MSVC11,我会得到40个字节。
为什么sizeof()
给我40但上面的编译器内存布局暗示32?
答案 0 :(得分:-1)
数据成员c可能是指向字符串对象的指针。由于std :: string存储了一个可变大小的字符串,因此您无法在该空间中放置任何所需的内容。
所以它是一个指针,由语言管理而不是你。