私はC言語を改訂し、alloca/free関数について説明しました。これは、スペースのようなスタックにストレージを割り当てることで記述されています。これはmalloc/freeと同じですか?またはこれは何か違うのですか?ありがとう。Cのalloca関数
答えて
alloca
は、スタックにメモリを割り当てるために使用されると思います。そして、はい、これはヒープに割り当てるmalloc
とfree
とは異なります。
alloca
を呼び出した関数が呼び出し元に戻るときに自動的に解放されるため、alloca
で割り当てられたメモリを解放しないでください。
alloca
および/またはC99可変長配列を使用すると、これらのツールを慎重に使用するとスタックが簡単にオーバーフローする可能性があるため、危険なビジネスになる可能性があります。
3番目の段落に十分なストレスを与えることはできません。 'alloca'やVLAを使う安全な方法はほとんどありません。 –
malloc
,calloc
およびrealloc
関数は、ヒープに領域を割り当てます。
free
機能は、以前にこれらの機能によって割り当てられたスペースを "解放"します。
古い回答にいくつかの追加情報を追加しています。
malloc()
は少数の理由のために使用することができ、それらのいくつかは、
しかし、余分な1動的なメモリ割り当て
- です
malloc()
で追加される作業は、割り当てられたメモリを明示的にfree()
する必要があります。だから、唯一動的なメモリ割り当て機能を使用すると、
free()
のオーバーヘッドを避けるために、人は自分のプログラムにalloca()
を使用することができます。これは、alloca()
が使用されているときにスタック上にメモリが割り当てられているため(他の回答に記載されているように)可能です。
@NickAハリスがやりたかったです。私はどんな場合でもそれを修正した。 – cmaster
- 1. 関数内の関数ラッパー/ allocaのスタック割り当て
- 2. allocaを使用してC関数ポインタを割り当てる方法は?
- 3. allocaポインタを返す
- 4. LLVM IR alloca命令
- 5. Rustのalloca/variable length配列ですか?
- 6. C関数への可変引数LISP関数のマッピング - C
- 7. C/C++のMATLAB "filter"関数
- 8. C++のメンバ関数への関数ポインタ
- 9. cの逆関数の関数ポインタ
- 10. クラスアクセッサ関数とC++のmutator関数
- 11. C++の関数ポインタとコールバック関数
- 12. 目的関数CへのSwift関数
- 13. Cのget_symbol関数
- 14. C++のパリンドローム関数
- 15. Cのストライド関数#
- 16. cのMalloc関数
- 17. C#の関数ポインタ
- 18. C++のsqrt関数
- 19. C#のコールバック関数
- 20. C#のフリースタンディング関数
- 21. C++のoverride関数
- 22. C++のマッピング関数
- 23. C関数のSIGSEGV
- 24. C++のスリープ関数
- 25. Cのprintf()関数
- 26. C++関数オブジェクトの引数
- 27. C++のsystem()関数のC++ system()関数ヘッダファイル
- 28. Android関数のC++関数からC関数を呼び出すJNI/NDKコード
- 29. ランダム関数C#
- 30. C#ModInverse関数
次のリンクは、 'alloc'が別の関数であることを示唆しています:http://cboard.cprogramming.com/c-programming/140380-k-r-5-6-stumped-again.html –
あなたが正しいと思います。私はそのアロケータの実装例を考えています。 – Cemre
あなたはK&Rを改訂していますか?あなたはすばらしくなければなりません。 – abelenky