社区
C语言
帖子详情
结构体的数据对齐?
mountaineer
2003-12-23 10:07:55
我们知道定义结构体时,为了优化
struct A{
char c1;
char c2;
int i1;
}
前两个char会占4个字节,这两个字节如何存放?它是如何优化的?为什么这样作可以优化?
一个编程规范中讲到:
在没有其他要求的情况下,优先使用int 类型.
优先使用有符号数。
能解释一下吗? 多谢了
...全文
189
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
不过就普通桌面应用而言
过于纠缠此细节并无实际意义
当然
理论研究不在讨论之列
struct
结构体
字节
对齐
原则及为什么要
对齐
?
http://blog.sina.com.cn/s/blog_14ecf1a5b0102x27j.html https://blog.csdn.net/zhanghow/article/details/55262988 //-------------------------------------------------------- 本文目录结构 |-为什么
结构体
内存
对齐
|-
结构体
内...
为什么会有
结构体
内存
对齐
?
我们都知道计算机是以字节(Byte)为单位划分的,但是大部分处理器并不是按字节块来存取内存的。它一般会以2字节,4字节,8字节,16字节甚至32字节为单位来存取内存。 32位系统下,int占4byte,char占一个byte,那么将它们放到一个
结构体
中应该占4+1=5byte?实际上,通过运行程序得到的结果是8 byte,这就是内存
对齐
所导致的。下面我们来介绍什么是内存
对齐
?
对齐
准则 1、第一个成员在与
结构体
变量偏移量为0的地址 2、 其他成员变量要
对齐
到某个数字(
对齐
数)的整数倍的地址处。 3、
对齐
数
为什么
结构体
要考虑
对齐
?编程语言的元组?可以控制
结构体
或类的字段偏移?如何优雅的展示一个类对象或
结构体
?
tuple是一种
数据
结构,可以存储多个元素,尽管元素可以是不同的
数据
类型,在某些时候,函数返回值可能超过一个类型,tuple很好地解决了这个问题。如不
对齐
,就会出现CPU多次访问的问题。助您在编程路上越走越好!
结构体
数据
存储时的
对齐
原则
这几天在学c++时发现一个很有趣的问题,在此与大家共同分享。
数据
在系统存储中,有时并不是按我们所想象的那样存储。例如在如下的代码中,大家觉得结果会是什么。 #include using namespace std; struct ABC { ABC( ){ a = 0x12345678 , b = 0xabcd , c = 0xef ;} unsigned char c ; in
结构体
对齐
?
0 记得计组考试时候遇到过一道题, 计算
结构体
所占的内存大小, 当时错了, 但是后来也没明白是为什么而错。 今日转而学习了一波, 渐渐解开了一些疑惑
结构体
大小的计算公式
结构体
大小 = sizeof(
数据
成员1) + sizeof(
数据
成员2) + sizeof(
数据
成员3) + ... 按照道理来说这个公式是没问题的, 但是问题就在这里 内存
对齐
VC++ 6.0 指定的默认对...
C语言
70,040
社区成员
243,237
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章