gpt4 book ai didi

c++ - 是否可以在使用不同编译器编译的应用程序之间共享共享内存中的 C 结构?

转载 作者:行者123 更新时间:2023-12-04 00:49:05 25 4
gpt4 key购买 nike

我意识到 C 和 C++ 标准通常为编译器编写者提供了很大的自由度。但特别是它保证像 C struct 成员这样的 POD 类型必须按照它们在 structs 定义中列出的相同顺序在内存中布局,并且大多数编译器提供扩展让您修复成员的对齐方式。因此,如果您有一个 header 定义了一个结构并手动指定了其成员的对齐方式,然后使用 header 使用不同的编译器编译了两个应用程序,那么一个应用程序不应该能够将结构的实例写入共享内存而另一个应用程序能够无误地读取它吗?

我假设所包含的类型的大小在同一架构上的两个编译器之间是一致的(它必须已经是同一平台,因为我们正在谈论共享内存)。我意识到对于某些类型(例如 GCC 和 MSVC 64 位中的 long 与 long long)并不总是如此,但现在有 uint16_t、uint32_t 等类型,float 和 double 由 IEEE 标准指定。

最佳答案

只要您可以保证完全相同的内存布局,包括偏移量,并且数据类型在 2 个编译器之间具有相同的大小,那么就可以了。因为此时结构在数据访问方面是相同的。

关于c++ - 是否可以在使用不同编译器编译的应用程序之间共享共享内存中的 C 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2103079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com