内存中的结构布局数组

时间:2012-06-15 17:07:52

标签: c memory

 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;

我无法想象。请帮忙!

BTW这取自What Every Programmer Should Know About Memory

的第3.3.2节

3 个答案:

答案 0 :(得分:3)

struct l的布局如下。正如这本书所说它将占用32个字节。

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

在32位系统struct l*上,指向结构的指针将占用4个字节。类型long int的变量将占用相同的内存量。

答案 1 :(得分: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]

答案 2 :(得分:1)

这只意味着每次为struct l分配内存时,你需要4个字节(指针)+ 4个字节(假设long int是4个字节)* 7.

所以使用你的系统,它应该是:     add = 2000 * n     add = 2004 pad [0]     add = 2008 pad [1]     ...