为什么VC ++中的#pragma pack使用堆栈?

时间:2013-08-30 19:23:11

标签: visual-c++ compiler-construction alignment padding

我在msdn中阅读了这篇文章,我想知道为什么有一个内部编译器堆栈持有这个aligment?我的意思是只有5个值可以设置为打包对齐为什么要存储它们?甚至可以选择分配标识符。你为什么要这样做?好奇。

1 个答案:

答案 0 :(得分:1)

头。请考虑以下.cpp文件:

#pragma pack(16)
#include <stdlib.h>

<stdlib.h>标头定义了受#pragma pack影响的类型,#pragma pack会破坏这些类型的定义,导致未定义的行为和难以诊断的运行时错误

我们在<stdlib.h>中通过推送打包,将其重置为一个众所周知的包装,并在文件末尾弹出原始包装来防止这种情况。其他库和SDK的标题可以做类似的事情来抵御这种情况。