struct{
short a1;
short a2;
short a3;
}A;struct{
long b1;
short b2;
}B;那么sizeof(A),sizeof(B) 多少啊?
short a1;
short a2;
short a3;
}A;struct{
long b1;
short b2;
}B;那么sizeof(A),sizeof(B) 多少啊?
解决方案 »
- 请问各位有谁知道多分辨率金字塔算法么?
- error C2447: missing function header (old-style formal list?)
- View中控制另一个界面中的按钮状态的问题,不能ShowWindow(false)!!在线等待!!!!
- ====> 第一次到此, 怎么把加到资源文件中的 gif 文件 来实例 Image 类型?
- Popup Menu在状态栏上的提示问题?
- 新人请教
- listctrl的一个小小问题。
- 怎么办呢?
- 一直让我徘徊在VC大门之外的许多技术问题之一 仍是作为初学者的请教
- 如何让一个窗口不可以移动?而且总在最前(象oicq)?(用api)答对一个就给分!!!!!!!!!!!!
- vc有没有可用的 zip或者 rar压缩 解压缩的程序?
- 写游戏外挂时,在游戏内存中查字符串查不到!
在32位系统、8字节对齐的情况下,sizeof(A) = 8
sizeof(B) = 8
A和B是结构体,在默认情况下,好像系统会做内存对齐的处理。当结构体内的元素的长度都小于处理器的位数时,便以结构体内最长的数据元素为对齐单位,结构体长度应该是最长的数据元素的整数倍。如果结构体内存在长度大于处理器位数的元素,那么就以处理器的位数为对齐单位。结构体A中,三个元素都是2字节的长度,所有,A的长度以2字节为对齐单位,所以应该是6,而且6也是2的整数倍。而结构体B中,b1为4字节,b2为2字节,则应该以4字节为对齐单位,所以,B的长度为 (2+4)+2=8 字节,后面的 (+2)是为了使B的长度为4的倍数而补足的两个字节,因为6不是4的倍数。大体就这样了。-------------------------------------------------------------
#pragma pack(N) N是你对齐字节数,可以设置
一般正常的是6和8啦,网上类似这个系统的文章很多的,楼主关注下.
面试题,这个非常多,陷阱也多,但是大多嵌入式方向的.
#pragma pack(push, 1)
struct A{
...
};
#pragma pack(pop)表示 1 字节对齐;你自己尝试一下 1, 2, 4, 8 ,调试看看内存,就明白了