社区
C语言
帖子详情
关于字节对齐
freekingdong
2009-02-28 11:54:06
#include<windows.h>
#include<iostream>
using namespace std;
struct s{
byte d;
byte w;
DWORD t;
};
main()
{
struct r;
int a=sizeof(s);
cout<<a<<endl;
}
byte 占一个字节,DWORD 占4个字节 怎么s会是8呢?
...全文
72
11
打赏
收藏
关于字节对齐
#include #include using namespace std; struct s{ byte d; byte w; DWORD t; }; main() { struct r; int a=sizeof(s); cout<<a<<endl; } byte 占一个字节,DWORD 占4个字节 怎么s会是8呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xhy_851221
2009-02-28
打赏
举报
回复
因为有DWORD所以是四字节对齐
d和w各占一个,接着两个用空填充
保证t开始的位置能被4整除即:
dw t
01234567
d占0,w占1,
2,3空
t占4,5,6,7
kostion
2009-02-28
打赏
举报
回复
比如存放的内存地址从0000开始
[Quote=引用楼主 freekingdong 的帖子:]
struct s{
byte d; // d ,存放在0000上,满足0000 % 1 = 0,成立
byte w; // w,存放在0001上, 满足0001% 1 = 0,成立
DWORD t; // t,存放在,0002~0005上,满足0002%4 = 0,不成立,所以对其,存放在0004~0007上,
//0000~0007,共8个字节
};
最后其实还是要看s的,由于满足存放地址模对其量,所以不用执行对其操作,最终是8
byte 占一个字节,DWORD 占4个字节 怎么s会是8呢?
[/Quote]
freekingdong
2009-02-28
打赏
举报
回复
1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除;
2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员自身大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);
3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)。
文章出处:http://www.diybl.com/course/3_program/c++/cppxl/2008912/142510.html
sxbwelcome
2009-02-28
打赏
举报
回复
这是字对齐
byte d 虽然理论上占一个字节,但实际上其占两个字节
所以2+2+4=8
freekingdong
2009-02-28
打赏
举报
回复
w为什么会填3个字节呢?
oyljerry
2009-02-28
打赏
举报
回复
struct s{
byte d; //1
byte w; //3
DWORD t; //4
};
字节对齐,d占有1个字节,w填充的时候会填充3个,以满足填满4字节,t占4个字节
dongpy
2009-02-28
打赏
举报
回复
[Quote=引用楼主 freekingdong 的帖子:]
#include <windows.h>
#include <iostream>
using namespace std;
struct s{
byte d;
byte w;
DWORD t;
};
main()
{
struct r;
int a=sizeof(s);
cout < <a < <endl;
}
byte 占一个字节,DWORD 占4个字节 怎么s会是8呢?
[/Quote]
处理器是按总线对齐方式访问内存的,所以编译器对结构体对齐排列,以提高效率。
猫已经找不回了
2009-02-28
打赏
举报
回复
struct s{
byte d; [0]
byte w; [1]
DWORD t; [4][5][6][7]这就是字节对齐的原则,DWORD占4字节,就应该从4字节的整数倍位置开始存储
};
楼主都知道这是字节对齐的原则,还这么费解?看注释咯、。
OenAuth.Core
2009-02-28
打赏
举报
回复
附:一定要认真看完,对你受用不尽
OenAuth.Core
2009-02-28
打赏
举报
回复
看完了你就全明白了
http://hi.baidu.com/anglecloudy/blog/item/df52ac60cda92543eaf8f87d.html
lingyin55
2009-02-28
打赏
举报
回复
这是字节对齐,一般在结构体里面是根据最长的变量来进行对齐的,除非之前加了设定。
[Quote=引用 2 楼 freekingdong 的回复:]
w为什么会填3个字节呢?
[/Quote]
c语言中从字中取高低字节,关于
字节对齐
关于
字节对齐
一、快速理解1. 什么是
字节对齐
在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构...
关于
字节对齐
的问题(vs.net)(转载)
转自http://nephen.bokee.com/4739983.html关于
字节对齐
的问题(vs.net) 请看下面的结构: struct MyStruct { double dda1; char dda; int type }; 对结构MyStruct采用sizeof会出现什么结果呢?sizeo
字节对齐
问题详解
字节按照一定规则在空间上排列就是
字节对齐
。现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问...
字节对齐
、8
字节对齐
在内存管理中经常使用
字节对齐
来管理分配的内存。 1、原理 2
字节对齐
:要求地址位为2, 4, 6, 8…,地址的二进制最后一位为0(2的1次方)。 4
字节对齐
:要求地址位为4,8,12,16…,地址的二进制最后两位为0(2的2...
C/C++中的
字节对齐
,结构体对齐,alignment,详细的解释
字节对齐
或者结构体对齐有什么作用?...首先关于
字节对齐
(对齐的英文原名是alignment,但是英文里面没有byte alignment这种叫法,我见到的有data alignment, data structure alignment, structure alignm
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章