0

C++ でのコンテナのメモリ割り当てについて質問があります。

マルチスレッド アプリケーションの疑似コードを見てください (C++ であると仮定します)。main メソッドで vector オブジェクトを宣言します。次に、スレッドを実行し、このオブジェクトをスレッドに渡します。スレッドは別のプロセッサで実行されます。ここで、100000 要素をベクターに挿入します。

typedef struct myType
{
    int a;
    int b;
}myType;

ThreadRoutine()
{
    Run Thread in processor P;
    insert 1000000 elements into myTypeObject
}

int main()
{
    std::vector<myType> myTypeObject;
    CALLTHREAD and pass myTypeObject
} 

100000 個の要素にメモリが割り当てられる場所を知りたい: -メイン自体から -スレッドから

これを尋ねる理由は、別のプロセッサでスレッドを実行したいからです。私のマシンは NUMA マシンです。そのため、メモリがスレッドから割り当てられた場合、それはスレッドのローカル メモリ バンクになります。ただし、メモリがメインから割り当てられる場合は、メイン スレッドのローカル メモリ バンクから割り当てられます。

私の直感では、メモリはスレッドにのみ割り当てられていると言えます。考えを教えてください。

4

1 に答える 1

1

再割り当てはから呼び出されますThreadRoutine()-つまり、どのスレッドがそれを呼び出しても(例ではセカンダリ)。

もちろん、reserveセカンダリ スレッドでのサイズ変更を避けたい場合は、メイン スレッドで渡すこともできます。

于 2012-08-24T21:06:23.777 に答える