c - c编译器如何为结构分配内存?

标签 c

通过研究结构,我想到了一个问题,即编译器如何将结构存储在内存中,这意味着要考虑

struct 
{
      int number;
      char name[nam];
 }h;

我想知道的是成员(这里是numbername)是如何存储的(例如它们是按顺序存储还是随机存储)如果数字存储在地址 2000 中并且 name 存储在 2990) ?

最佳答案

内存按结构成员的顺序分配:

+------------+------------------+-----+-----+-----+-----+-----+-----+
|            |     ........     |     |     |     |     |     |     |
|            |                  |     |     |     |     |     |     |
+------------+--------+---------+-----+-----+-----+-----+-----+-----+
+            +        |       name[0]                             name[nam-1]
+------+-----+        |         +------------------+----------------+
       |              |                            |
       |              |                            |
       v              v                            v
    number         padding                      name[nam]

但是,与数组不同,为结构分配的内存可能会或可能不会被打包,即,在任何成员的分配空间之后可能会有一些填充(但在第一个成员之前不允许填充)。

关于c - c编译器如何为结构分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20685748/

相关文章:

c - C 编程中的跳转/分支表

c - 我想在一个循环或类似的东西中有 100 个结构

php - $_GLOBAL 、 $_POST 等全局变量存储在哪里?

无法从 C 中的函数返回结构

c - 线程练习。交替打印两个不同线程的 id

java - 为 DNA 声明一个新的数据类型

无法在 gcc ubuntu linux 中正确输入字符串

无法理解简单程序集 x86 中 %rax 的值

c++ - 编写 C/C++ 守护进程 (Linux)

c - 在 C 中更新 CRC32 值