通过研究结构,我想到了一个问题,即编译器如何将结构存储在内存中,这意味着要考虑
struct
{
int number;
char name[nam];
}h;
我想知道的是成员(这里是number
和name
)是如何存储的(例如它们是按顺序存储还是随机存储)如果数字存储在地址 2000 中并且 name
存储在 2990) ?
最佳答案
内存按结构成员的顺序分配:
+------------+------------------+-----+-----+-----+-----+-----+-----+
| | ........ | | | | | | |
| | | | | | | | |
+------------+--------+---------+-----+-----+-----+-----+-----+-----+
+ + | name[0] name[nam-1]
+------+-----+ | +------------------+----------------+
| | |
| | |
v v v
number padding name[nam]
但是,与数组不同,为结构分配的内存可能会或可能不会被打包,即,在任何成员的分配空间之后可能会有一些填充(但在第一个成员之前不允许填充)。
关于c - c编译器如何为结构分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20685748/