[英]Class size in c++ based on system architecture
我創建了一個簡單的類,並具有帶有虛擬函數的數據成員。 下面我粘貼了代碼以供參考。
class base
{
public:
int i;
virtual void foo()
{
}
base()
{
cout << "constructing a base" << endl;
}
~base()
{
cout << "destroying the base" << endl;
}
};
根據我對以上基於體系結構的示例的理解,在32位計算機上,類大小為8字節(int為4字節,vpointer為4字節),在64位計算機上為12字節(int為4字節,vpointer為8字節) 。 但是當我將程序作為64位可執行文件運行時,我得到16個字節。 我無法理解哪里還有4個字節。 我正在使用xcode並運行mac OS 10.8。
獨立於sizeof(int)
(取決於系統-> https://blogs.oracle.com/nike/entry/ilp64_lp64_llp64(@rubenvb感謝您的鏈接),例如64位Windows使用4Byte作為整數),編譯器可以填充類可用於最大的非結構成員的多個(在本例中為8字節,因為vtable指針)。
這是為了確保對成員的訪問在特定地址處對齊以提高性能,並防止未對齊的數據訪問可能導致某些CPU出現硬件異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.