2017-06-03 10 views
1
#include<iostream> 

using namespace std; 

class Node 

{ 

    public: 

     int data; 

     Node *next; 

}; 

int main() 

{ 

    Node* re=new Node(); 

    Node* t=new Node(); 

    re->data=2; 

    re->next=t; 

    cout<<sizeof(Node)<<endl; 

    cout<<sizeof(re->data)<<endl; 

    cout<<sizeof(re->next)<<endl; 

} 

出力リレー:私はどのようにサイズの取得方法来るクラスのサイズは16リンクリストのノードクラスのサイズが16になっていますか?

ように出ている

ポインタは、64ビットマシンでは8バイト、 整数では4バイトです。したがって、クラスのサイズが12(8 + 4)、すなわちクラスのメンバーの合計であるべきではないか? なぜ余分な4つがあるのですか?

+0

パディングと呼ばれています。 64ビットオペレーティングシステムを前提とすると、 'next'メンバは8バイト境界でなければなりません。したがって、' int'と各インスタンスのポインタの間に4バイトのパディングがあります。 –

答えて

1

コンパイラは、配置に余分なスペースを追加します。いわゆるメモリパディング。 詳細な説明は次のとおりです。padding and packaging

関連する問題