2

ファイルにエクスポートしたい構造体があり、そのファイルをmmap()します。1つの問題は、構造体に文字列であるメンバー変数があり、mmapがそれをどのように処理するかわからないことです。この場合、これらの文字列はすべて同じサイズ、8文字です。Linuxのmmap()関数を複製することになっているオンラインで見つけたmmap()関数を使用していますが、私はWindowsで作業しています。

構造体自体は次のように定義されます。

struct testStruct
{
    string testString;
    unsigned int testInt;
    unsigned int tsetArr[9];
};

オブジェクトのsizeof()の戻り値を定義することは可能ですか?

構造体データを含むファイルをmmappingすることは可能でしょうか?

構造体をファイルにエクスポートしてからmmapするには、どのコードを使用する必要がありますか?

4

2 に答える 2

6

の表現はstd::stringC++標準では保証されていないため、これは機能しません。std::stringその内容をヒープ上の任意の場所に割り当てる可能性があります(通常はそうします)。そのため、文字列自体ではなく、ポインターとサイズメンバーを格納します。

charただし、などのコンパイル時定数サイズの配列は機能するtsetArrはずです。

オブジェクトのsizeof()の戻り値を定義することは可能ですか?

No.sizeofは関数ではないため、オーバーロードすることはできません(厳密には、値はありますが、どこからも返されないため、戻り値はありません。コンパイラによって定数に展開されます)。

structデータを含むファイルをmmapすることは可能でしょうか?

はい、可能ですが、私はそれに反対することをお勧めします。あなたのコードは、おそらく同じプラットフォーム上の異なるコンパイラーにさえ移植可能ではなく、あなたstructは石に投げ込まれます。とにかくそうしたい場合はmmap、ポインタメンバーのないPOD(プレーンな古いデータ)のみを作成し、定義が変更されるたびにインクリメントするunsigned versionメンバーを自分の中に入れます。struct

于 2011-05-04T18:33:50.310 に答える
1
struct testStruct
{
    char testString[9];
    unsigned int testInt;
    unsigned int tsetArr[9];
};
于 2011-05-04T22:14:03.777 に答える