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

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)
如何能够减小空间使用?减小的话带来什么不利影响?
...全文
118 8 1 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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寄存器的各位意义等情况)。
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.5w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2013-02-04 11:24
社区公告
暂无公告