1
 int a[2];

メモリ内のこれは、実際には次のようになります。

 //Assuming int is 2 bytes 

 add=2000, a[0]=124    

 add=2002, a[1]=534 

これは実際にメモリ内でどのように見えるか

 struct l {

 struct l    * n;

 long int pad[7];

 };          

 struct l container;

私は視覚化することができません。助けてください!

ところで、これはWhat Every Programmer Should Know About Memoryのセクション 3.3.2 から取得したものです。

4

3 に答える 3

3

のレイアウトは次のstruct lようになります。本が言うように、それは32バイトを占めるでしょう。

   addr   ref
   -----------------
   2000:  n
   2004:  pad[0]
   2008:  pad[1]
     ...
   2028:  pad[6]

32ビットシステムstruct l*では、構造体へのポインタは4バイトを占有します。タイプの変数はlong int同じ量のメモリを占有します。

于 2012-06-15T17:14:42.780 に答える
1

アーキテクチャーのポインターが4バイトで、アーキテクチャーのlongintが4バイトであると仮定します。

struct l {
   struct l    * n;
   long int pad[7];
};

struct l someName;

レイアウトは次のようになります。

add=2000, someName.n
add=2004, someName.pad[0]
add=2008, someName.pad[1]
...
add=2028, someName.pad[6]
于 2012-06-15T17:15:47.303 に答える
1

これは、struct l にメモリを割り当てるたびに、4 バイト (ポインタ) + 4 バイト (long int が 4 バイトであるとしましょう) * 7 が必要になることを意味します。

したがって、システムを使用すると、次のようになります。 add=2000 *n add=2004 pad[0] add=2008 pad[1] ...

于 2012-06-15T17:15:48.740 に答える