c++ - 如何通过编译器设置(不是编译指示)告诉 GCC 将结构大小边界设置为 4 个字节?

标签 c++ gcc compiler-warnings compiler-optimization memory-alignment

我希望在 GCC 下编译的 c++ 程序最大对齐 4 个字节(结构成员)。我真的可以通过#pragma pack 指令来做到这一点。然而,这对我来说很不舒服,因为项目很大,我需要用#pragma pack 制作一个 header ,必须在任何地方都包含它。现在,gcc 编译器有一个选项 -mstructure-size-boundary=n 记录在此处 http://gcc.gnu.org/onlinedocs/gcc/ARM-Options.html#ARM-Options ,它说“允许的值为 8、32 和 64”。实际上,当我尝试将其设置为 4 字节时,编译器会抛出警告“结构大小边界只能设置为 8、32 或 64”(令人惊讶,嗯?)。但是为什么我可以通过#pragma 将它设置为 4?有谁知道如何通过编译器设置将 gcc 结构对齐设置为 8-32-64 以外的其他值?

最佳答案

您对 mstructure-size-option 的理解有误。它指的是结构的大小(顾名思义)。这与成员的对齐无关。为此,您可以使用(除了 pragma 之外)选项 -fpack-struct[=n]

关于c++ - 如何通过编译器设置(不是编译指示)告诉 GCC 将结构大小边界设置为 4 个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10277196/

相关文章:

c++ - 动态改变数组的大小c++

c++ - itemAt 不返回自定义 qGraphicsItem

c - GCC 优化问题和行为

c - 指向字符数组的指针

c++ - 无法推断模板参数?

c++ - Libtorch C++ - 没有匹配的成员函数来调用 InterpolateFuncOptions 的 'size'

c - 为什么 "double"表示为整数?

c++ - 在gcc中用数组参数编译extern "c"代码

c++ - “Warning: Comma within array index expression”,但逗号分隔函数参数

c - 宏名称的有效字符是什么?