#pragma pack(push,1)与#pragma pack(1)的区别
区别 PUSH pack pragma
2023-09-27 14:28:16 时间
这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式。
#pragma pack (n) 作用:C编译器将按照n个字节对齐。
#Pragma Pack(n)内存分配 #Pragma Pack主要是用在字节对齐方面,为什么要对齐呢? 因为计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。
#pragma的一些用法 1、#pragma message message 参数:Message参数能够在编译信息输出窗口输出相应的信息,这对于源代码的信息控制特别重要,其使用方法为: #pragma message( 消息文本 ) 当我们程序中定义了许多宏来控制源代码版本的时候,我们自己都有可能会忘记有没有正确设置...
这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式。
#pragma pack (n) 作用:C编译器将按照n个字节对齐。
#pragma pack () 作用:取消自定义字节对齐方式。
#pragma pack (push,1) 作用:是指把原来对齐方式设置压栈,并设新的对齐方式设置为一个字节对齐
#pragma pack(pop) 作用:恢复对齐状态
因此可见,加入push和pop可以使对齐恢复到原来状态,而不是编译器默认,可以说后者更优,但是很多时候两者差别不大
如:
#pragma pack(push) //保存对齐状态
#pragma pack(4)//设定为4字节对齐
相当于 #pragma pack (push,4)
#pragma pack (1) 作用:调整结构体的边界对齐,让其以一个字节对齐; 使结构体按1字节方式对齐
#pragma pack ()
例如:
#pragma pack(1)
struct sample
{
char a;
double b;
};
#pragma pack()
注:若不用#pragma pack(1)和#pragma pack()括起来,则sample按编译器默认方式对齐(成员中size最大的那个)。即按8字节(double)对齐,则sizeof(sample)==16.成员char a占了8个字节(其中7个是空字节);若用#pragma pack(1),则sample按1字节方式对齐sizeof(sample)==9.(无空字节),比较节省空间啦,有些场和还可使结构体更易于控制。
#Pragma Pack(n)内存分配 #Pragma Pack主要是用在字节对齐方面,为什么要对齐呢? 因为计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。
#pragma的一些用法 1、#pragma message message 参数:Message参数能够在编译信息输出窗口输出相应的信息,这对于源代码的信息控制特别重要,其使用方法为: #pragma message( 消息文本 ) 当我们程序中定义了许多宏来控制源代码版本的时候,我们自己都有可能会忘记有没有正确设置...
相关文章
- Golang 有类型常量和无类型常量的区别?
- #pragma pack(push,1)与#pragma pack(1)的区别(转)
- 《惢客创业日记》2021.07.26-31(周日)惢客与征信的区别(上)
- json.dumps()、json.dump()、json.loads()和json.dumps()的区别
- ts 中 interface 与 class 的区别
- C/C++函数参数传递时值传递、指针传递、引用传递的区别是什么?
- 结构体和类的区别
- 《操作系统真象还原》——0.21 Section和Segment的区别
- 央票和国债的区别
- mybatis 中的 resultType 和 resultMap 的用法与区别
- SQL优化 查询语句中,用 inner join 作为过滤条件和用where作为过滤条件的区别
- 浅析CSS的性能优化:transform与position区别、硬件加速工作原理及注意事项、强制使用GPU渲染的友好CSS属性
- 浅谈子段、子串、子序列的区别
- 性能测试—运行时间设置和迭代次数区别