首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C编译器如何为结构分配内存?

C编译器如何为结构分配内存?
EN

Stack Overflow用户
提问于 2013-12-19 15:39:46
回答 6查看 392关注 0票数 4

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

代码语言:javascript
运行
AI代码解释
复制
struct 
{
      int number;
      char name[nam];
 }h;

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

EN

回答 6

Stack Overflow用户

发布于 2013-12-19 15:43:25

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

代码语言:javascript
运行
AI代码解释
复制
+------------+------------------+-----+-----+-----+-----+-----+-----+
|            |     ........     |     |     |     |     |     |     |
|            |                  |     |     |     |     |     |     |
+------------+--------+---------+-----+-----+-----+-----+-----+-----+
+            +        |       name[0]                             name[nam-1]
+------+-----+        |         +------------------+----------------+
       |              |                            |
       |              |                            |
       v              v                            v
    number         padding                      name[nam]

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

票数 4
EN

Stack Overflow用户

发布于 2013-12-19 15:44:16

你可以在Data structure alignment中找到答案

数据结构对齐是在计算机内存中排列和访问数据的方式。它由两个独立但相关的问题组成:数据对齐和数据结构填充。当现代计算机读取或写入内存地址时,它将以字大小的块(例如,32位系统上的4字节块)来执行此操作。数据对齐意味着将数据放在等于字大小的某个倍数的内存偏移量处,由于CPU处理内存的方式,这将提高系统的性能。要对齐数据,可能需要在上一个数据结构的末尾和下一个数据结构的开头之间插入一些无意义的字节,这就是数据结构填充。

票数 2
EN

Stack Overflow用户

发布于 2013-12-19 15:44:29

字段将始终按照写入的顺序排列,但它们之间可能会有填充。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20685748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文