メモリを再割り当てするための正しくて最良の方法は何ですか? たとえば、WinAPI 関数 HeapAlloc で 100 バイトを割り当ててから、そのメモリの 100 バイトをデータで埋めて、前のデータの最後に新しいデータを追加したい...
私は何をすべきか?より多くのバイトで新しい割り当てを作成し、古い + 新しいを新しい場所にコピーして古いメモリを解放しますか? または、古いデータの最後に新しいメモリを割り当てて、新しいデータのみをコピーする方法はありますか?
メモリを再割り当てするための正しくて最良の方法は何ですか? たとえば、WinAPI 関数 HeapAlloc で 100 バイトを割り当ててから、そのメモリの 100 バイトをデータで埋めて、前のデータの最後に新しいデータを追加したい...
私は何をすべきか?より多くのバイトで新しい割り当てを作成し、古い + 新しいを新しい場所にコピーして古いメモリを解放しますか? または、古いデータの最後に新しいメモリを割り当てて、新しいデータのみをコピーする方法はありますか?
データをコピーせずにメモリを拡張できる場合、Windows は間違いなく最適化されているため、おそらくHeapReAllocを使用する必要があります。
たとえばrealloc、現在のブロックがそれに続く空きブロックを吸収できるかどうかを確認する (C 標準のもの) の実装を見てきました。その場合は、コピー操作を回避するためにそれを行います。そうでない場合は、新しいメモリを割り当て、古いメモリを解放する前にコピーを行います。
そのもう 1 つの利点は、必要な余分なメモリを最小限に抑えることです。コピー バージョンでは、ある時点で現在のデータの 2 つのコピーが存在する必要があります。