2つのスレッドを実行し、小さな配列(〜4096バイト)をソートして出力ファイルに書き込む単純なプログラムを作成しました。入力データには1つの大きなファイル(〜4Gb)が含まれています。コンピュータには128MBのメモリがあります。私は空のメイン関数を実行すると14MBのメモリを使用することが分かった。空の関数アプリケーションでstd :: threadを実行すると、スレッドごとに〜8MBが使用され始めます。しかし、私は1つの動的メモリ割り当てプログラムを作成する場合は、スレッドあたり約64MBを使用し始めます。私は何がそんなにメモリを費やすことができるのか分かりません。どのようにこのサイズを制御できますか?システムのデフォルト割り当てを最小限に抑えるためにダイナミックメモリをどのように割り当てるか?空の関数を使ってstd :: threadを実行すると、大量のメモリが必要になる
- システム:のUbuntu 14.04.3
- コンパイラ:のgcc 4.8.4
コンパイラオプション: '-std = C++ 11 -03 -pthread'
これはコード例です
void dummy(void) { std::vector<unsigned int> g(1); int i = 0; while(i<500000000) { ++i; } } int main(void) { std::thread t1(&dummy); std::thread t2(&dummy); std::thread t3(&dummy); t1.join(); t2.join(); t3.join(); return 0; }
異なるアロケータを試してみてください。 jemalloc、tcmalloc。 –
プログラムで使用したメモリの量はどのように決定しましたか? –
私はあなたの措置を信用していません。どのようにしてメモリフットプリントを見つけましたか? – SergeyA