2017-10-02 3 views
0

最新のC++コンパイラの複数スレッドでのメモリ割り当ては、グローバルロックアクセスを引き起こしますか?コンパイラとオペレーションシステムの違いはいくらですか?個々のスレッドが必要とするときに動的に割り当てるのではなく、あらかじめ割り当てられたグローバル配列(あまりクリーンでなく、あまり便利ではない)に少量のデータを入れることにどれだけのメリットがありますか?マルチスレッドパフォーマンスへのメモリ割り当ての影響

+0

これは実際には言語、デザイン、要件、ユースケース、使用されるフレームワークなどによります。 –

答えて

1

すべてのスレッドは共通の仮想アドレス空間を共有しているため、ヒープ(mallocまたはnew)からのメモリ割り当てによってすべてのスレッドが使用する仮想アドレス空間が更新されます。これがどのように実装されるかは、オペレーティングシステムとコンパイラによって異なります。

割り振られたメモリが関数スコープを必要とし、大きすぎない場合は、alloca()(または_alloca())を使用して割り振ることができます。これはスタックから割り振ります。スレッドと関数のローカルインスタンスその割り当てられたメモリの

私が書いたマルチスレッドプログラムでは、起動時に割り当てられたメッセージおよび/またはバッファ「フリー」プールを使用して、スレッドにメッセージを「割り当て」、「解放」させたり、 「フリー」プールからのバッファ。

関連する問題