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

问题描述 投票:0回答:1

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

visual-c++ alignment padding
1个回答
1
投票

标题。 考虑以下 .cpp 文件:

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

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

我们在

<stdlib.h>
中通过推送打包,将其重置为众所周知的打包,然后将原始打包弹出到文件末尾来防止这种情况。 其他库和 SDK 的标头可以执行类似的操作来防御这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.