社区
C语言
帖子详情
结构体的数据对齐?
mountaineer
2003-12-23 10:07:55
我们知道定义结构体时,为了优化
struct A{
char c1;
char c2;
int i1;
}
前两个char会占4个字节,这两个字节如何存放?它是如何优化的?为什么这样作可以优化?
一个编程规范中讲到:
在没有其他要求的情况下,优先使用int 类型.
优先使用有符号数。
能解释一下吗? 多谢了
...全文
106
8
打赏
收藏
结构体的数据对齐?
我们知道定义结构体时,为了优化 struct A{ char c1; char c2; int i1; } 前两个char会占4个字节,这两个字节如何存放?它是如何优化的?为什么这样作可以优化? 一个编程规范中讲到: 在没有其他要求的情况下,优先使用int 类型. 优先使用有符号数。 能解释一下吗? 多谢了
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xilihuala
2004-01-06
打赏
举报
回复
gcc中你可以考虑用开关-fpack-struct来关闭自动填充.一般情况下,自动填充是无害的,也不影响读写效率,只是浪费空间而已,但是特殊情况下就必须要考虑填充的问题,如设定一个结构来映射某个寄存器空间,或者映射某个非对齐帧结构,那么,你就一定要取消自动填充了.
qian_gr
2004-01-06
打赏
举报
回复
如果是4字节对齐,一般会做如下填充
struct A{
char c1;
char c2;
char spare[2]
int i1;
}
所谓优化是从存取效率考虑,可以参考 zxm954712(三绝剑) 给出的链接。
int类型一般为4个字节,这个现在的32位机器有很微妙的关系,我们的数据总线是32位的,正好一次可以存取一个整型,所以一般来说,整型的存取效率是最高的。
sharkhuang
2003-12-24
打赏
举报
回复
你可以强行单字节对齐!pack(1)
zxm954712
2003-12-24
打赏
举报
回复
you may refer to http://expert.csdn.net/Expert/topic/2000/2000453.xml?temp=.2495996
19830711
2003-12-24
打赏
举报
回复
还没有考虑到这个问题
victor_cui
2003-12-24
打赏
举报
回复
其实你可以告诉编译器你需要什么样的对齐方式,当然是以牺牲一点电性能为代价的,比如你需要你的char只占用一个字节,则使用如下定义
#progma pack(1)
you struct define....
#progma pack()
上面的1是告诉编译器你的对齐方式是以单字节为单位,如果你需要你的char 占4个字节把
pack(1) => pack(4)就可以了
pig1210127
2003-12-24
打赏
举报
回复
没注意这个问题
gz 一下
SCUM
2003-12-23
打赏
举报
回复
就个人看法简单地说:
CPU 进行内存R/W的时候
一次访问WORD或DWORD要比访问BYTE快
这步优化其实由硬件完成
而提供优先使用signed int(32bit 64bit)也是由于CPU内建了对此数据类型的优化MicroCode
不过就普通桌面应用而言
过于纠缠此细节并无实际意义
当然
理论研究不在讨论之列
C
结构体
对齐
详解(
结构体
成员
对齐
)
结构体
数据
成员指针
对齐
,通过指针偏移给
数据
成员赋值。
C语言中的
结构体
对齐
是什么?如何控制
结构体
对齐
方式?
结构体
对齐
是指如何在内存中安排
结构体
的成员,以便使它们在内存中
对齐
到合适的边界位置。在许多计算机体系结构中,访问未
对齐
的内存可能会导致性能下降或引发硬件异常。因此,
结构体
对齐
是一种重要的优化机制,它...
C语言中的
结构体
对齐
原则是什么?如何进行
结构体
的
对齐
控制?
C语言中的
结构体
对齐
原则(Struct Alignment)是一种重要的内存布局概念,它影响着
结构体
成员在内存中的排列方式,以及访问这些成员的效率。
结构体
对齐
原则确保了
结构体
成员在内存中的存储是按照一定规则进行的,以...
结构体
数据
对齐
结构体
数据
对齐
结构体
数据
对齐
,是指
结构体
内的各个
数据
对齐
。在
结构体
中的第一个成员的首地址等于整个
结构体
的变量的首地址,而后的成员的地址随着它声明的顺序和实际占用的字节数递增。为了总的
结构体
大小
对齐
,...
为什么会有
结构体
内存
对齐
?
我们都知道计算机是以字节(Byte)为单位划分的,...下面我们来介绍什么是内存
对齐
?
对齐
准则 1、第一个成员在与
结构体
变量偏移量为0的地址 2、 其他成员变量要
对齐
到某个数字(
对齐
数)的整数倍的地址处。 3、
对齐
数
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章