メインプログラムで宣言された変数とインスタンス化されたクラスオブジェクト内の変数との間のメモリアドレッシングの違いを理解しようとしています!C++の "インスタンス化されたオブジェクトとオブジェクトの変数の中の変数"のメモリアドレス
私の質問は、メインプログラムの中で "int a、int b"のような2つの変数を宣言するときに、メモリ内の特定の2つのアドレスで4 + 4バイトを取ります。例 "aはメモリ0x248444にあり、bは0x248448にあります" ....この場合は大丈夫です。
2つの変数 "int c、int d"を持つクラスインスタンス化オブジェクトについて言えば、オブジェクトは8バイトの例 "0x248544"のメモリアドレスをとりますが、 "int cとint d"のアドレスはどうですか?
したがって、int cとint dのアドレスは、そのオブジェクトアドレス "0x248544"の内部にありますか? int cとint dには特定のアドレスがありますか?
インスタンス化されたクラスオブジェクトのアドレスとそのオブジェクト内の変数のアドレスの違いは何ですか?
は私の質問が明確であるホープ....
インターネットで検索した後、私は「C++オブジェクト・モデル内」という本を見つけましたが、インスタンス化されたクラスオブジェクトで宣言された変数に関するメモリ差の基本的な理解のためにメインで宣言された変数誰かが私をきれいにする助けてください。
ありがとうございました。
メモリのレイアウトはプラットフォームによって異なります。たとえば、メンバー間のパディングは、特定のプラットフォーム上のメンバータイプのサイズと配置要件によって異なります。最新のスタンダードについてはわかりませんが、しばらくの間、同じアクセス指定子を持つメンバーに対してのみメンバーオーダーが維持されていたことがわかります。 –
related/dupe:http://stackoverflow.com/questions/26939609/how-is-the-memory-layout-of-a-class-vs-a-struct – NathanOliver
クラスオブジェクトは、PODの場合は構造体と同じレイアウトです(パディングを含む)。変数のアドレスは、クラス自体からオフセットされている可能性があります。 'offsetof(cls、some_var) 'を使用できます。 – Brandon