タグ付けされた質問 「malloc」

5
文字列を返す関数、良いスタイル?
私のCプログラムでは、ADTの文字列表現を作成する方法が必要になることがよくあります。文字列を画面に出力する必要がない場合でも、このようなデバッグ方法があると便利です。そのため、この種の機能がよく出てきます。 char * mytype_to_string( const mytype_t *t ); 文字列が返すメモリを処理するために、ここには(少なくとも)3つのオプションがあることを実感しています。 代替方法1:関数の静的文字配列に戻り文字列を格納します。文字列がすべての呼び出しで上書きされることを除いて、私はあまり考える必要はありません。これは、場合によっては問題になることがあります。 代替方法2:関数内のmallocを使用して、ヒープに文字列を割り当てます。バッファのサイズや上書きについて考える必要がないので、本当にすてきです。ただし、完了したら文字列をfree()することを忘れないでください。また、解放できるように一時変数に割り当てる必要もあります。ヒープ割り当てはスタック割り当てよりもはるかに遅いため、これがループで繰り返されるとボトルネックになります。 代替方法3:ポインタをバッファに渡し、呼び出し側にそのバッファを割り当てさせます。お気に入り: char * mytype_to_string( const mytype_t *mt, char *buf, size_t buflen ); これにより、発信者により多くの労力がかかります。この代替案では、引数の順序に関する別のオプションが提供されることにも気づきました。最初と最後のどちらの引数が必要ですか?(実際には6つの可能性) それで、どちらを選ぶべきですか?なんで?Cの開発者の間には、ある種の未記述の標準がありますか?

6
mallocの効率と実装の違いは?
私が使用している場合はmalloc、ないmallocにかかわらず、常にそれが配分されているものと同じアルゴリズムを使用するか、それがデータを見て、appriopriateアルゴリズムを選択しますか? より効率的なアルゴリズムを選択することにより、mallocをより速くまたはよりスマートにすることができますか?私のテストではmalloc、テスト結果が正しければ、Ubuntuの組み込み公式システムは学校プロジェクトよりも10倍遅くなります。キャッチとは何ですか?malloc最適化する必要があるため、テストでのパフォーマンスが非常に悪いことに驚いています。常に同じアルゴリズムを使用していますか?のリファレンス実装はありmallocますか?のソースを確認したい場合malloc、どこを見ればよいですか?私が実行するテストは次のとおりです。 /* returns an array of arrays of char*, all of which NULL */ char ***alloc_matrix(unsigned rows, unsigned columns) { char ***matrix = malloc(rows * sizeof(char **)); unsigned row = 0; unsigned column = 0; if (!matrix) abort(); for (row = 0; row < rows; row++) { matrix[row] = …
8 c  performance  malloc 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.