1
我有這個類:大小不匹配
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 | [email protected]@@ a
1> 24 | [email protected]@@ b
1> 40 | [email protected][email protected]@[email protected]@[email protected]@[email protected] c
1> 72 | [email protected][email protected]@[email protected]@ d
1> 96 | [email protected][email protected]@@@[email protected]@[email protected][email protected]@@@[email protected]@@[email protected]@ e
1> 120 | f
1> | <alignment member> (size=4)
1> +---
它意味着數據成員c
是32個字節。
但是,如果我在我的平臺(Win 7 64)上做sizeof(std::string)
,使用MSVC11,我會得到40個字節。
爲什麼sizeof()
給我40,但上面的編譯器內存佈局意味着32?
爲什麼當沒有虛擬函數的類時會顯示一個vtable指針? –
@MobyDisk我刪除了專注於數據成員的方法。 – user997112
@ user997112:不要刪除你認爲不重要的東西。向我們展示您編譯的* exact *代碼以及您爲該代碼獲得的* exact *輸出。 –