1. ホーム
  2. c

[解決済み] なぜalloca()の使用はグッドプラクティスとみなされないのでしょうか?

2022-03-21 04:15:43

質問

alloca() のように、ヒープ上ではなくスタック上にメモリを確保します。 malloc() . だから、ルーチンから戻ったときにメモリは解放される。つまり、実はこれで、動的に割り当てられたメモリを解放するという私の問題が解決されたわけです。で割り当てられたメモリの解放 malloc() は大きな頭痛の種で、何らかの形で見逃すと、あらゆる種類のメモリの問題につながります。

なぜ alloca() 上記のような特徴があるにもかかわらず、推奨されないのでしょうか?

解決方法は?

その答えは man ページ(少なくとも リナックス ):

戻り値 alloca()関数は、alloca()関数の先頭へのポインタを返します。 を使用します。 もし アロケーション スタックオーバーフローの場合、プログラムの動作は未定義である。

決して使ってはいけないというわけではありません。 私が働いているOSSプロジェクトの1つでは、これを広範囲に使用していますし、乱用しない限りは( alloca 巨大な値を持つ)、それは問題ない。 数百バイトの値を超えたら、その時点で malloc とその仲間たちです。 それでもアロケーションに失敗することはありますが、少なくともスタックを吹き飛ばすのではなく、失敗の兆候を示すことができるようになります。