0

static map オブジェクトを定義した関数があるのですが、new operator や malloc などの以下のメモリ割り当てに影響があるようです。コード例は次のとおりです。

void foo()
{
    static map<string, int> word2idx;
    char * data = new char[100];
    delete[] data;
    word2idx = foo2();

}
map<string,int> foo2()
{
     map<string, int> word2idx;
     return word2idx;
}

関数 static マップ オブジェクトの定義が原因でメモリの小さなチャンクを割り当てることができませんでしたが、以下に示すように関数 foo のスコープからその静的変数をグローバル スコープに削除すれば問題ありません。

static map<string, int> word2idx;
void foo()
{
    char * data = new char[100];
    delete[] data;
    word2idx = foo2();

}
map<string,int> foo2()
{
     map<string, int> word2idx;
     return word2idx;
}

最初の例では、関数 static 変数が 2 回メモリに割り当てられていたと思います (1 回目は初期化、2 回目はマップの演算子 = です)。これがこのメモリ割り当ての問題の原因である可能性があります。しかし、私はそれを保証することはできません. この関数の静的変数に関連する問題について、より合理的な説明や参照を誰かが提供できますか?

4

0 に答える 0