一个关于结构体内存对齐的问题

miss_chalk 2013-02-04 11:24:36
有结构体S1和S2
Struct S1{
Char c;
Int I;
};

Struct S2{
Char c;
Struct S1 s;
Double d;
};

求sizeof(S1)和 sizeof(s2)
如何能够减小空间使用?减小的话带来什么不利影响?
...全文
149 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
miss_chalk 2013-02-04
  • 打赏
  • 举报
回复
啊,这种N字节内存对齐确实可以哈。。。不过,这种N字节对齐会产生什么不利的影响呢?
nice_cxf 2013-02-04
  • 打赏
  • 举报
回复
引用 3 楼 nice_cxf 的回复:
默认情况s1 8字节,S2 vs系列24,gcc20 没什么必要减少把,这点内存影响不大
忘记说了,32位系统下
nice_cxf 2013-02-04
  • 打赏
  • 举报
回复
默认情况s1 8字节,S2 vs系列24,gcc20 没什么必要减少把,这点内存影响不大
「已注销」 2013-02-04
  • 打赏
  • 举报
回复
对齐就是x86 CPU访问速度会慢点,如果只访问有限次数的话完全可以忽略不计。 某些处理器对于不对齐的数据会出错的
「已注销」 2013-02-04
  • 打赏
  • 举报
回复
设置对齐呗
#pragma pack(push, 1)
#pragma pack(pop)
AnYidan 2013-02-04
  • 打赏
  • 举报
回复
默认的对齐方式是 struct 中最大的标量数据类型的倍数
「已注销」 2013-02-04
  • 打赏
  • 举报
回复
引用 6 楼 jha334201553 的回复:
引用 2 楼 jha334201553 的回复:不对齐就是x86 CPU访问速度会慢点,如果只访问有限次数的话完全可以忽略不计。 某些处理器对于不对齐的数据会出错的少了一个不字哈,这要从微码上面说了,汇编还无法解释这个问题,内存不对齐的时候 mov eax,[40101] 这样的需要读取两次内存,比 mov eax,[40100] 慢,体系结构的问题。 一般自己写……
又把位域扯进去了,我脑袋短路了~~~~
「已注销」 2013-02-04
  • 打赏
  • 举报
回复
引用 2 楼 jha334201553 的回复:
对齐就是x86 CPU访问速度会慢点,如果只访问有限次数的话完全可以忽略不计。 某些处理器对于不对齐的数据会出错的
少了一个不字哈,这要从微码上面说了,汇编还无法解释这个问题,内存不对齐的时候 mov eax,[40101] 这样的需要读取两次内存,比 mov eax,[40100] 慢,体系结构的问题。 一般自己写程序不需要特意的去节约内存,除非你在一个资源非常紧缺的系统上面。内存对齐主要是用来解析数据用的,比如说文件格式(BMP的RGB\lnk、cpu flag寄存器的各位意义等情况)。

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧