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;

我无法想象。请帮忙!

顺便说一句,这取自每个程序员应该了解的关于内存的第 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 个字节,而架构中的 long int 是 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 回答