3

C ++では、C ++標準は、メモリレイアウトの観点から、クラス内でのデータメンバーの配置方法とは何の関係もないと思いますか?これは問題のコンパイラにかかっていると私は考えるのは正しいでしょうか?

オブジェクトやその他のC++エンティティ(構造体など)が物理メモリでどのように表現されるかを学ぶことに非常に興味があります(リストはノード間であり、配列は連続メモリですが、言語の他のすべての側面は知っています)。

編集:x86アセンブラーを学ぶことは、これを助け、C ++をよりよく理解するのに役立ちますか?

4

2 に答える 2

6

C ++標準はいくつかのことを指定していますが、すべてからはほど遠いです。

主なルールは次のとおりです。

  • 配列内のオブジェクトは、間にパディングなしで連続して配置されます。
  • アクセス指定子( / / )で区切られていないクラスメンバーオブジェクトは、宣言された順序でメモリに配置されますが、メンバーオブジェクト間に不特定の量のパディングが存在する場合があります。public:private:protected:
  • 特定のタイプ(標準的な用語では標準レイアウト構造体)の場合、最初の基本クラス、または存在しない場合は最初のメンバーが、クラス自体と同じアドレスに配置されます。

標準で指定されているビットとピースは他にもいくつかありますが、全体として、残りの詳細は実際にはコンパイラに委ねられています。

于 2012-10-14T18:03:46.437 に答える
2

はい、標準では、オブジェクトがメモリ内でどのように表現されるかについては規定されていません。通常のC++オブジェクトがどのように表現されるかを理解するには、この本を読んでください:C++オブジェクトモデルの内部。

于 2012-10-14T18:03:00.637 に答える