社区
C++ 语言
帖子详情
内存对齐的问题
Disa16
2009-11-21 04:04:17
大家帮忙看下,
struct a
{
char x;
int y;
double z;
char b;
}
sizeof(a) 的值是多少啊?
...全文
109
11
打赏
收藏
内存对齐的问题
大家帮忙看下, struct a { char x; int y; double z; char b; } sizeof(a) 的值是多少啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
phpjspasp
2009-11-21
打赏
举报
回复
gcc 4.1.3
20
leewon1988
2009-11-21
打赏
举报
回复
[Quote=引用 6 楼 benbshmily 的回复:]
win32
VS2005
24
1+3填充+4+8+1+7填充。因为是按照double 8字节对齐。
[/Quote]
你理解不对吧
对其的时候不是看当前类型的长度和#pragma pack(value)中value值的最大值,而是看其最小值
z0203153008
2009-11-21
打赏
举报
回复
我虚拟机里的GCC是1+4+(3)+ 8 + 1+(7),vc6应该是20
Julykey
2009-11-21
打赏
举报
回复
不好意思看错了,3是填充的
Julykey
2009-11-21
打赏
举报
回复
sizeof(int)不是4吗?为什么是3?
我在VS2005下也是24
benbshmily
2009-11-21
打赏
举报
回复
win32
VS2005
24
1+3填充+4+8+1+7填充。因为是按照double 8字节对齐。
la_feng
2009-11-21
打赏
举报
回复
struct a
{
char x; // 占用空间0
int y; //空间1,2,3空出,y占用4-7
double z; // 占用8-15
char b; //占用16,补满4字节对齐,17-19空出
}
0-19是20个空间,具体与编译器相关参考楼上的
cattycat
2009-11-21
打赏
举报
回复
一般是20.
leewon1988
2009-11-21
打赏
举报
回复
在#pragma pack(4)下,结果应该是:1+3+4+8+1+3=20
starwalker
2009-11-21
打赏
举报
回复
和编译器有关
leewon1988
2009-11-21
打赏
举报
回复
这个根据不同的编译器,结果是不一样的,还有要根据你的#pragma pack(value)种value的值来确定
【C/C++】详解
内存对齐
问题
,C语言
内存对齐
整理
本专栏记录了博主C++从初阶到高阶完整的学习历程,会发布一些博主学习的感悟、碰到的
问题
、重要的知识点,和大家一起探索C++这门程序语言的奥秘。这个专栏将记录博主C++语法、高阶数据结构、STL的学习过程,正所谓“万丈高楼平地起”嘛,我们话不多说,继续进行C++阶段的学习。本文我们不讲C++主线的内容,我们来拓展一下或者说整理一下我们学习时C/C++时经常会提到的一些专有名词,例如形参、实参,显式类型转换和隐式类型转换类型转换,内置类型、
内存对齐
问题
等等。
内存对齐
问题
背景
内存对齐
可能很多程序员接触不到,也许只在面试的偶尔会被问到过,但是也只是背背固定的公式,大概知道怎么计算,也能知道大致的原理,就是数据不对齐,取数次数要变多,但是只是理解到这种程度还不够,目前intel cpu不需要对齐才能访问,但是对于一些新的arm芯片,自研芯片等等,自己在做hpc时,发现这个
内存对齐
问题
还是一个比较严重的事情,这里好好的捋顺一下,避免自己以后遗忘。 规则 结构体中大小为 size 的字段,他的结构内偏移 offset 需要是其min(default, size)的整数倍 //d
结构体
内存对齐
问题
结构体
内存对齐
问题
,是笔试重点考察部分
C语言结构体
内存对齐
问题
内存对齐
的基本原则包括成员对齐和结构体整体对齐。成员地址必须是其类型大小的整数倍(如char任意地址,int需4的倍数),结构体总大小需对齐到最宽成员类型倍数。示例展示了不同成员顺序带来的填充差异,嵌套结构体需按内部最大对齐值处理。可通过#pragmapack(n)指定对齐,但可能影响性能。
内存对齐
主要出于硬件限制(如ARM不支持非对齐访问)和性能优化考虑(减少CPU访问次数和缓存冲突)。合理利用对齐能提升程序效率,但需平衡内存占用与性能。
结构体中的
内存对齐
问题
结构体中的
内存对齐
一.
内存对齐
的原因 1.平台原因(移植原因): 一些资料上是这样说的,“不是所有的硬件平台都能访问任意地址上的任意数据;某些硬件平台只能在某些特定地址处取某些特定的数据,否则就会抛出硬件异常”。也就是说在计算机在内存读取数据时,只能在规定的地址处读数据,而不是内存中任意地址都是可以读取的。 2.效率原因: 正是由于只能在特定的地址处读取数据,所以在访问一些数据时,对于访问未对齐的内存,处理器需要进行两次访问;而对于对齐的内存,只需要访问一次就可以。 其实这是一种以空间换时间的做法,但这
C++ 语言
65,210
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章