#pragma pack&pop


这是给编译器用的参数设置,有关结构体字节对齐方式设置, #pragma pack是指定数据在内存中的对齐方式。

#pragma pack(n)

作用:C编译器将按照n个字节对齐。

#pragma pack()

作用:取消自定义字节对齐方式。

#pragma pack(push, 1)

作用:是指把原来对齐方式设置压栈,并设新的对齐方式设置为一个字节对齐

#pragma pack(pop)

作用:恢复对齐状态

因此可见,加入push和pop可以使对齐恢复到原来状态,而不是编译器默认,可以说后者更优,但是很多时候两者差别不大

例:

#include <iostream>
#include <string>
using namespace std;

#pragma pack(push, 1)
struct A {
    char a;
    int  b;
};
#pragma pack(pop)

struct B {
    char a;
    int  b;
};

int main() {
    cout << sizeof(A) << sizeof(B);
    //58
    return 0;
}

A不用#pragma pack(push, 1)#pragma pack(pop)括起来,则输出88

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 接上一篇#pragma编译指令大全(上) inline_depth 语法 作用 指定函数的内敛深度,超过深度n的内...
    小猪啊呜阅读 9,551评论 2 5
  • 简单理解#pragma 作为较为复杂的预处理指令之一,它的作用为更改编译器的编译状态以及为特定的编译器提供特定的编...
    Umiade阅读 2,069评论 0 0
  • 1.#pragma简述: 在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或...
    null122阅读 12,489评论 2 12
  • iOS宏的经典用法Apple的习惯attribute iOS宏的经典用法1.常量宏、表达式宏 define kTa...
    reallychao阅读 3,928评论 0 0
  • 我一个人的时候,很追求存在感,我追求的存在感有两种,一种在朋友圈里的,一种在自己心里面的。但是还是觉得非常迷茫,没...
    c1dd5a05d5c8阅读 316评论 1 1