とを使用free
しmalloc
ます。これにより、断片化の問題が発生することはありません。
最新のアロケータは、メモリの断片化に対してかなり耐性があります。最近では、断片化の問題を引き起こすにはかなり病的なプログラムが必要です。プログラムが物理 RAM を直接アドレス指定した場合、断片化はより深刻な問題でしたが、仮想メモリを使用すると、プログラムのヒープに大きな「穴」があっても、リソースを消費する必要はありません。
さらに、バッファーのサイズが原因で、ほとんどのアロケーターは、バッファーごとにカーネルから専用の領域を要求します。Linux / OS X / BSD では、これは各バッファmmap
の舞台裏での匿名を意味します。 これによりアドレス空間が断片化する可能性がありますが、仮想アドレス空間は基本的に 64 ビット システムではフリーであり、32 ビット システムでも数百メガバイトであれば問題ありません。
したがって、 と を使用free
しmalloc
ます。
別の方法:各バッファーを必要以上に大きくした方が速い場合があります。この方法malloc
は最新の Unix で機能し、書き込みを行わないページはメモリを消費しません。
したがってmalloc
、500 MB のバッファーを使用して最初の 100 MB のみを使用する場合、プログラムは実際にはmalloc
、100 MB のバッファーですべてを使用する場合よりも多くのメモリを使用しません。この方法ではアドレス空間の断片化が増えますが、64 ビット システムでは問題ありません。また、32 ビット システムでも機能するように、割り当てサイズをいつでも調整できます。
を使用する提案については、 / を /へのより単純なインターフェイスとmmap
考えてください。これは、大規模な割り当ての場合です (1 MiB が一般的なしきい値です)。malloc
free
mmap
munmap