有多种pragma
用于控制结构/类布局,例如pragma pack
。但据我所知,没有 pragma
表示“我不关心布局。它是内部的,代码不依赖它。重新排序以获得最佳性能/大小。” . AFAIK,这是典型情况,在许多情况下它可以提高性能/大小。此外,即使程序员非常小心地根据性能/大小对其重新排序,不同的目标架构也可能具有不同的最佳布局。
编辑:澄清一下,我说的是成员的顺序。填充已经是可控的。
另外,PVS-Studio 有一个相关的 message .这就是我所说的 - 为什么这不能由带有 pragma
的编译器完成?
最佳答案
该语言特别指出类成员在内存中的排序方式与它们在每个访问级别(如 private
)中的排序方式相同。编译指示无法覆盖此行为。
参见 9.2/14:
Nonstatic data members of a (non-union) class with the same access control (Clause 11) are allocated so that later members have higher addresses within a class object. The order of allocation of non-static data members with different access control is unspecified
请记住,重新排序成员会改变子对象构造函数和析构函数的调用顺序,也可能会改变其他事情。即使给编译器一个 pragma 在幕后进行这些类型的更改似乎也非常冒险(如果您有一个成员依赖于另一个成员的初始化怎么办)。
关于c++ - 是否有不关心结构/类布局的编译指示?如果不是,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26408426/