一般に、C および C++ 標準は、コンパイラの作成者に多くの自由を与えていることを認識しています。しかし特に、C 構造体メンバーのような POD 型は、構造体定義にリストされているのと同じ順序でメモリに配置する必要があることが保証されます。また、ほとんどのコンパイラは、メンバーの配置を修正できる拡張機能を提供します。したがって、構造体を定義し、そのメンバーの配置を手動で指定するヘッダーがあり、そのヘッダーを使用して異なるコンパイラで 2 つのアプリをコンパイルした場合、一方のアプリが構造体のインスタンスを共有メモリに書き込み、他方のアプリが共有メモリに書き込むことができないはずです。アプリはエラーなしでそれを読むことができますか?
ただし、含まれる型のサイズは、同じアーキテクチャ上の 2 つのコンパイラ間で一貫していると想定しています (共有メモリについて話しているので、既に同じプラットフォームである必要があります)。一部の型 (GCC および MSVC 64 ビットでの long と long long など) ではこれが常に当てはまるとは限りませんが、最近では uint16_t、uint32_t などの型があり、float と double は IEEE 標準で指定されています。