C でのメモリの再割り当て
C で動的メモリ割り当てを使用する場合、開発者はデータの変更に対応するためにメモリを再割り当てする必要があることがよくあります。サイズ。 C のような言語とは対照的に、C は明示的な realloc 関数を提供しません。
代替手段の検討
現在のポインターを削除し、より大きなサイズの新しいポインターを割り当てることは、非効率であるため、最適なソリューションではありません。以下は、標準ライブラリを使用したより良いアプローチです。
標準テンプレート化ライブラリ (STL) ベクトルの使用
STL ベクトルは、動的なメモリ割り当てとサイズ変更を処理する便利な方法を提供します。これらは、サイズ変更メンバー関数を通じて効率的な再割り当て機能を提供します。再割り当てにベクトルを使用する方法は次のとおりです:
コード変換:
// Old C code using realloc Type* t = (Type*)malloc(sizeof(Type)*n) memset(t, 0, sizeof(Type)*m) // New C++ code using std::vector std::vector<Type> t(n, 0); // Resizing in C using realloc t = (Type*)realloc(t, sizeof(Type) * n2); // Resizing in C++ using vector::resize t.resize(n2);
ベクトルを使用した関数の呼び出し:
ベクトルを関数に渡すには、次を使用します構文:
Foo(&t[0]); // Instead of Foo(t)
これにより、ポインタ引数を期待する関数引数との互換性が確保されます。
STL ベクトルの利点
メモリの再割り当てに STL ベクトルを使用すると、いくつかの利点:
以上がC 開発者はどうすれば効率的にメモリを再割り当てできるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。