- 487 名前:デフォルトの名無しさん mailto:sage [2019/12/02(月) 15:20:31.50 ID:Vo2mhncO.net]
- >>468
実はかなり古くから、C/C++ の malloc(), new のヒープメモリから確保したメモリの 断片化は、実際に問題になるようなことはとても少ないといわれています。 というのは、断片化というのは、確保したメモリを開放したときに出来た 「隙間にある空きメモリ」が再利用されにくい場合に起きるものなんですが、 実際には、再利用されることが多いためです。なぜなら、おなじサイズの オブジェクトを new することが多いためです。この場合、完全に再利用されるので 断片化の問題と言うものは全く起きないと言っても過言では有りません。 それから、通常、1つのオブジェクトのサイズは小さく、それが多数集まって データをなしていることが多いのです。このことから、異なるサイズのオブジェクト であっても、1つ1つのオブジェクトのサイズが小さいため、断片化したとしても、 再利用される確率が高いのです。まず、同じサイズのオブジェクトであれば再利用されます。 異なるサイズであっても、昔開放されたオブジェクトよりも、小さいサイズのオブジェクトを 新しく確保する場合であれば再利用されます。 このようなことから現実の例では、断片化しても、使われないメモリの量はある程度の比率 に収まると言われており、それは GarbageCollection を行うためのオーバーヘッドの メモリのサイズと比べても余り大きいものではないのです。 ゲームはメモリー効率も求められますが、それでも C/C++ が使われているのは、 メモリー断片化の量が一定比率より多くなら無い事が経験的に知られているためです。
|

|