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