自明の答えは、たvallocを使用することが適切であるとのmallocは(効率の低い)には不向きであるときアプリケーション(仮想)メモリ使用パターンとvallocがより適しています(より効率的です)。これは、OSやライブラリ、アーキテクチャ、アプリケーションに依存します...
mallocは、使用可能であれば解放されたメモリから実際のメモリを割り当てていましたが、そうでない場合はbrkポイントを増やすことで、セキュリティ上の理由からOSによってクリアされます。
dumb実装のcallocはmallocを実行してからメモリをクリアしますが、スマートな実装では、オペレーティングシステムによって自動的にクリアされる、新たに割り当てられたメモリの再呼び出しが回避されます。
vallocは仮想メモリに関連しています。ファイルシステムを使用している仮想メモリシステムでは、大量のメモリまたはファイルスペース/スワップスペースを物理メモリよりも多く割り当てることができ、ページ単位でスワップされます。 Unixでは、指定されたファイルのファイルの作成とページの追加/削除は、ファイルを定義するためにinodeを使って行われますが、実際のディスクブロックは必要に応じて処理されません。したがって、実際に物理ページやスワップページを割り当てたり、forループを実行したりすることなく、ファイルシステムとページングシステムが必要に応じてデータセグメントスワップのサイズを増やすことができます。したがって、vallocはmallocよりもずっと高速です。しかし、callocと同様に、どのようなidiotsyncratic * x/Cフレーバがそれをするのかは、彼らの責任であり、vallocのmanページは、これらの期待に全く役に立たない。
伝統的に、これはbrk/sbrkで実装されました。もちろん、ページングされたシステムであれ、セグメント化されたシステムであれ、仮想メモリシステムでは、このbrk/sbrkのものはまったく必要ありません。ファイルまたはアドレススペースに最後の場所を書き込むだけで十分ですポイント。
通常、ユーザーが必要とするものではなく、通常はシステムが望むまたは必要とするものであるページ境界への割り当てを再割り当てします。
vallocをシミュレートする(おそらくもっと高価な)方法は、ページ境界を決定してからこのalignment仕様でaligned_allocまたはposix_memalignを呼び出すことです。
vallocが推奨されなくなった、または一部のOSで削除されている、または不要であるという事実は、他のものではまだ効率的ではないことを意味しません。それが廃止されたり削除されたりすると、効率的な代替品があることを期待しています(しかし、私はそれに賭けることはできませんし、実際に自分自身のmalloc交換を書いたかもしれません)。
過去40年間にわたり、仮想メモリと実メモリのトレードオフは定期的に変更されており、主流のOSは効率(時間やスペース)のないプログラマ主要な命令として組み込みシステムでは、効率はより重要ですが、標準のOSやツールでは効率がよくサポートされないことがよくあります。しかし疑いの余地があるときは、誰かが目を覚まして実行/実行することに頼ったり、元に戻す/やめることを決めるのではなく、自分が必要とするものを自分のアプリケーションにロールバックすることができます。
本当の答えは、必ずしもvallocやmalloc、calloc、あるいはあなたの現在のOSのサブバージョンのいずれかを使用したくないということです。
MSVCには 'valloc'はありませんが、' _aligned_malloc'があります –
短い答え:**パフォーマンスのために**ほとんどのアーキテクチャでは実装固有の機能が必要です。 –
これは参考になる可能性があります。https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxbd00/rvallo.htm – JAL