我意识到通常 C 和 C++ 标准为编译器编写者提供了很大的自由度。但特别是它保证像 C 结构成员这样的 POD 类型必须按照它们在结构定义中列出的顺序排列在内存中,并且大多数编译器都提供了扩展,让您可以修复成员的对齐方式。因此,如果您有一个定义结构的标头并手动指定其成员的对齐方式,然后使用标头使用不同的编译器编译两个应用程序,那么一个应用程序是否应该能够将结构的实例写入共享内存而另一个应用程序能够正确读取它吗?
我假设包含的类型的大小在同一架构上的两个编译器中是一致的(它必须已经是同一个平台,因为我们正在谈论共享内存)。我意识到这对于某些类型并不总是正确的(例如 GCC 和 MSVC 64 位中的 long 与 long long),但现在有 uint16_t、uint32_t 等类型,并且 float 和 double 由 IEEE 标准指定。