我在 msdn 中阅读了这篇文章,我想知道为什么有一个内部编译器堆栈保存对齐?我的意思是只有 5 个值可以设置为包装对齐,为什么要存储它们?甚至还有一个分配标识符的选项。你为什么要这么做?只是好奇。
标题。 考虑以下 .cpp 文件:
#pragma pack(16)
#include <stdlib.h>
<stdlib.h>
标头定义了受#pragma pack
影响的类型,而#pragma pack
会破坏这些类型的定义,导致未定义的行为和难以诊断的运行时错误。
我们在
<stdlib.h>
中通过推送打包,将其重置为众所周知的打包,然后将原始打包弹出到文件末尾来防止这种情况。 其他库和 SDK 的标头可以执行类似的操作来防御这种情况。