#pragma pack(n)
来源:互联网 发布:最大公约数算法 编辑:程序博客网 时间:2024/06/07 02:57
事实上,很多人对#pragma pack的理解是错误的。
#pragma pack规定的对齐长度,实际使用的规则是:
结构,联合,或者类的数据成员,第一个放在偏移为0的地方,以后每个数据成员的对齐,
按照#pragma pack指定的数值和这个数据成员自身长度中,比较小的那个进行。
也就是说,当#pragma pack的值等于或超过所有数据成员长度的时候,这个值的大小将不产生任何效果。而结构整体的对齐,则按照结构体中最大的数据成员 和 #pragma pack指定值 之间,较小的那个进行。
具体解释
#pragma pack(4)
class TestB
{
public:
int aa; //第一个成员,放在[0,3]偏移的位置,
char a; //第二个成员,自身长为1,#pragma pack(4),取小值,也就是1,所以这个成员按一字、节对齐,放在偏移[4]的位置。
short b; //第三个成员,自身长2,#pragma pack(4),取2,按2字节对齐,所以放在偏移[6,7]的位置。
char c; //第四个,自身长为1,放在[8]的位置。
};
这个类实际占据的内存空间是9字节
类之间的对齐,是按照类内部最大的成员的长度,和#pragma pack规定的值之中较小的一个对齐的。
所以这个例子中,类之间对齐的长度是min(sizeof(int),4),也就是4。
9按照4字节圆整的结果是12,所以sizeof(TestB)是12。
- #pragma pack(n) ........ #pragma pack()
- 关于 #pragma pack(n)
- 细说 #pragma pack(n)
- 细说 #pragma pack(n)
- 细说 #pragma pack(n)
- 细说 #pragma pack(n)
- #pragma pack(n)
- 细说 #pragma pack(n)
- 细说 #pragma pack(n)
- 细说 #pragma pack(n)
- 细说 #pragma pack(n)
- 细说 #pragma pack(n)
- #pragma pack(n)
- #pragma pack(n) 用法
- 细说 #pragma pack(n)
- 细说 #pragma pack(n)
- 细说 #pragma pack(n)
- 了解#pragma pack(n)
- ServletConfig与ServletContext
- Tomcat中的类加载器
- 开播
- ArcMap中创建网格的方法
- javascript验证类
- #pragma pack(n)
- linq增删改
- 重写pojo类的equals方法的作用
- Tomcat中的invoker
- 10月23腾讯笔试递归题
- JPEG文件数据结构以及将位图保存为JPG的代码
- 联合培养目标
- Oracle ORION IO 测试工具
- 一个简单的基于Servlet的验证码生成程序