#pragma pack 的用法
来源:互联网 发布:sql设置主索引 编辑:程序博客网 时间:2024/04/29 15:16
#pragma pack([n]) 表示内存对齐,目的是为了优化内存,减少内存碎片,使得内存按照一个固定的规则进行分配,让分配的内存总是n 的倍数。
其中,n = 1,2,4,8,16,32……
(1)Visual C++ 起始地址对齐的倍数规则
在默认情况下,Visual C++规定各成员变量存放的起始地址相对于结构的起始地址的偏移量必须是该变量的类型所占用的字节数的倍数。e.g.
#include <iostream>int main(){class X{public:int a;char b;short c;};int t = sizeof(X);return 0;}
t 正常应为7(=4+1+2),但实际却是为8。为什么?
(2)#pragma pack 规定的对齐长度规则
规则如下:结构、联合或者类的数据成员第一个放在偏移为0的位置,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员类型长度中取比较小的那个值对齐存放。
(3)#pragma pack的圆整规则
规则如下:在声明#pragma pack(n)的情况下,整个数据类型的长度必须是n的倍数。
#include <iostream>int main(){#pragma pack(4)class X{public:int a;char b;short c;char d;};int t1 = sizeof(X);return 0;}
t1 = 12;//正常应为8,对齐后为9,圆整规则后为12.
PS:
#pragma pack(push,n)表示规则开始有效
#pragma pack(pop)表示规则结束
- #pragma pack 的用法
- pragma pack的用法
- #pragma pack 的用法帮助
- 关于pragma pack的用法
- 关于pragma pack的用法
- #pragma pack(n)的用法
- #pragma pack(n)的用法
- #pragma pack(n)的用法
- #pragma push_macro #pragma pop_macro和#pragma pack的用法
- 关于pragma pack的用法(一)
- 关于pragma pack的用法 字节对齐
- 关于pragma pack的用法(一)
- 关于pragma pack的用法(一)
- 关于pragma pack的用法(一)
- C++中#pragma pack(N)的用法
- pragma pack用法
- #pragma pack 用法详解
- pragma pack 对齐用法
- 大学生如何让自己强大起来(计算机、电子方向)
- 例1 编写一个函数getbits,实现从一个16位的单元中取出某几位
- 几个简单的排序算法
- 驱动中获得系统时间(转)
- AndroidManifest.xml文件详解(service)
- #pragma pack 的用法
- button与submit
- Hadoop格式化HDFS报错java.net.UnknownHostException: localhost.localdomain: localhost.localdomain
- struts2 配置问题
- 打印驱动对象下的域值
- 写在博客访问量突破2W时
- Windows phone开发初体验之(二)-页面导航
- ubuntu下安装Apache+PHP+Mysql
- 重学设计模式 - Factory Method模式