欢迎光临,我们是一家专注中小型企业营销推广服务的公司!

咨询热线:400 9868 577
淮南兰乔电子商务有限公司
新闻中心News
淮南兰乔电子商务有限公司

【C语言】结构体内存对齐及大小计算

作者:絕刀狂花 | 点击: | 来源:絕刀狂花
2704
2025
✔1.结构体内存对齐我们已经掌握了结构体的基本使⽤了。现在我们深⼊讨论⼀个问题:计算结构体的⼤⼩。这也是⼀个特别热⻔的考点:结构体内存对⻬。✔2.对⻬规则⾸先得掌握结构体的对⻬规则:1.结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处☞偏移量2.其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。对⻬数=编译器默认的⼀个对⻬数与该成员变量⼤⼩的较⼩值。VS中默认的值为8-Linux中gcc没有默认对⻬数,对⻬数就是成员⾃⾝的⼤⼩3.结构体总⼤⼩为最⼤对...

✔1.结构体内存对齐

我们已经掌握了结构体的基本使⽤了。 现在我们深⼊讨论⼀个问题:计算结构体的⼤⼩。 这也是⼀个特别热⻔的考点: 结构体内存对⻬。

✔2.对⻬规则

⾸先得掌握结构体的对⻬规则: 1. 结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处

☞偏移量

2. 其他成员变量要对⻬到某个数字(对⻬数)的整数倍的地址处。对⻬数 = 编译器默认的⼀个对⻬数 与 该成员变量⼤⼩的较⼩值。

VS 中默认的值为 8 -Linux中 gcc 没有默认对⻬数,对⻬数就是成员⾃⾝的⼤⼩ 3. 结构体总⼤⼩为最⼤对⻬数(结构体中每个成员变量都有⼀个对⻬数,所有对⻬数中最⼤的)的整数倍。 4. 如果嵌套了结构体的情况,嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处,结构体的整体⼤⼩就是所有最⼤对⻬数(含嵌套结构体中成员的对⻬数)的整数倍。

✔3.计算结构体大小代码语言:javascript代码运

行次数:0运行复制
<code class="javascript">struct S{char c1;int i;char c2;};int main(){//输出的结果是什么?printf("%d\n", sizeof(struct S));return 0;}</code>

代码运行结果:

分析如下:

网奇.NET网络商城系统

系统优势: 1、 使用全新ASP.Net+c#和三层结构开发. 2、 可生成各类静态页面(html,htm,shtm,shtml和.aspx) 3、 管理后台风格模板自由选择,界面精美 4、 风格模板每月更新多套,还可按需定制 5、 独具的缓存技术加快网页浏览速度 6、 智能销售统计,图表分析 7、 集成国内各大统计系统 8、 多国语言支持,内置简体繁体和英语 9、 UTF-8编码,可使用于全球

下载

✔4.修改默认对⻬数

#pragma 这个预处理指令,可以改变编译器的默认对⻬数。


代码语言:javascript代码运行次数:0运行复制
<code class="javascript">#include <stdio.h>#pragma pack(1)//设置默认对⻬数为1struct S{ char c1; int i; char c2;};#pragma pack()//取消设置的对⻬数,还原为默认int main(){ //输出的结果是什么? printf("%d\n", sizeof(struct S)); return 0;}</code>

代码运行截图如下:

结构体在对⻬⽅式不合适的时候,我们可以⾃⼰更改默认对⻬数。

☑️5.为什么存在内存对⻬?

⼤部分的参考资料都是这样说的: 1. 平台原因 (移植原因): 不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2. 性能原因: 数据结构(尤其是栈)应该尽可能地在⾃然边界上对⻬。原因在于,为了访问未对⻬的内存,处理器需要作两次内存访问;⽽对⻬的内存访问仅需要⼀次访问。假设⼀个处理器总是从内存中取8个字节,则地址必须是8的倍数。如果我们能保证将所有的double类型的数据的地址都对⻬成8的倍数,那么就可以⽤⼀个内存操作来读或者写值了。否则,我们可能需要执⾏两次内存访问,因为对象可能被分放在两个8字节内存块中。 总体来说:结构体的内存对齐是拿空间来换取时间的做法。

相关推荐
我要咨询做网站
成功案例
建站流程
  • 网站需
    求分析
  • 网站策
    划方案
  • 页面风
    格设计
  • 程序设
    计研发
  • 资料录
    入优化
  • 确认交
    付使用
  • 后续跟
    踪服务
  • 400 9868 577
    info#ilanqiao.cn
Hi,Are you ready?
准备好开始了吗?
那就与我们取得联系吧

咨询送礼现在提交,将获得兰乔电子商务策划专家免费为您制作
价值5880元《全网营销方案+优化视频教程》一份!
下单送礼感恩七周年,新老用户下单即送创业型空间+域名等大礼
24小时免费咨询热线400 9868 577
合作意向表
您需要的服务
您最关注的地方
预算

直接咨询