簡體   English   中英

基於系統架構的C ++中的類大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM