1

別のサイズに再割り当てしたいメモリのブロックがありますが、メモリが破棄されるかどうかは関係ありません。メモリをfree()してから、新しいメモリブロックをmalloc()する方が速いでしょうか、それともrealloc()を使用する方法ですか?

余分な作業が行われるため、どちらの解決策も最適ではないと思います。現在のフラグメントが新しいメモリブロックを保持するのに十分な大きさまたは小ささである可能性があるため、realloc()は十分に大きいメモリブロックを見つけるのに高速であると確信しています。ただし、フラグメントが十分に大きくない場合は、malloc()がコピーしないメモリをコピーする必要があります。

Linuxを使用しています。これにはおそらく特別な機能がありますか?

ありがとう!:)

4

3 に答える 3

2

内容を気にしない場合、標準的なイディオムは、freeその後に。を続けることmallocです。ブロックを見つけることはそれをコピーするよりも安価でありrealloc、それ自体の検索を行わないという保証はありません。

このような状況ではいつものように、パフォーマンスを本当に気にする場合は、ターゲットプラットフォームと現実的なワークロードの両方で両方のソリューションのベンチマークを行い、どちらがパフォーマンスが優れているかを確認するのが最善です。

于 2012-11-10T20:11:08.580 に答える
1

realloc = Alloc次にコピーしてから解放する他のソリューションはallocであり、解放する方が確実に高速です

于 2012-11-10T20:48:25.247 に答える
0

私は先に進み、reallocの実装が正しいことをすることを信頼します。また、将来的には、メモリの移動や再割り当てなどについて心配する必要はありません。この種のプリエンプティブ最適化は、ほとんどの時間がユーザースペースからカーネルスペースへのコンテキストスイッチに費やされるため、不要です。

于 2012-11-10T20:16:40.027 に答える