問題タブ [alloca]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - C alloca 関数 - 大量のメモリを割り当てようとするとどうなるか
C では、alloca() 関数は alloca() の呼び出し元のスタックフレームにメモリを割り当てます。
おそらく割り当てられない膨大な数のバイトを割り当てようとするとどうなりますか?
- スタックがヒープ セグメントに達するまで、できるだけ多くのバイトを割り当てますか?
それとも何も割り当てませんか?
alloca(10000000000000000000);
マニュアルには次のように記載されています。
alloca() 関数は、割り当てられたスペースの先頭へのポインタを返します。割り当てによってスタック オーバーフローが発生した場合、プログラムの動作は未定義です。
動作が未定義であることを理解しています。しかし、それ以上に言うべきことがあります。
- main が呼び出される前のスタックの一番上の後の最初のバイトへのポインターは何を返しますか?
- alloca() が返された後、スタック ポインターは alloca() が呼び出される前とは異なりますか?
誰かがこれについてもっと情報を持っていますか?
c - _malloca がヒープにメモリを割り当てられない場合
alloca がヒープにメモリを割り当てることができない場合、構造化例外スタック オーバーフローが作成され、スタック オーバーフローでプログラムが停止します。Ok。しかし、_malloca がヒープにメモリを割り当てられない場合、何も表示されません。大量のメモリを割り当ててから使用しましたが、アクセス違反の例外が発生します。例
しかし、割り当てられたメモリの一部のみを使用すると、例外はまったく発生しません。例
VSE2013 ウィンデスクトップ。大木、あなたは言うかもしれませんが、例外をキャッチしてみてください
しかし、それは機能し続けます。配列のすべての要素を使用すると、再びアクセス違反が発生します。
質問: それはバグですか、それとも機能ですか?
c - C 関数内での malloc の使用法
私は次の機能を持っています:
私は一時的なポインタ*temp
にメモリを割り当てています:
しかし、私はそれをどこにも解放していません。
私の知る限り、そのメモリを解放するには 4 つのオプションがあります。
- 同じスコープで使用
free()
します(ポインターを返さなければならないため、私には不可能です) alloca()
すべてのコンパイラでサポートされていない使用(ANSI C ではない)malloc()
関数の外側のポインターとそのポインターを関数に渡し、次に関数の外側に渡しfree()
ます- 返されたポインタを変数に割り当て、その変数を解放する
これはオプション #4 のコードです。
そのポインターは既に編集されているため、返されたポインターを割り当てるときにmalloc()
変数を使用する必要がありますか?var
malloc()
私の質問は次のとおりです。
malloc()
関数内で使用する最良の方法は何ですか?
4 番目のオプションを使用するmalloc()
場合、返されたポインターを割り当てる前に変数を使用する必要がありますか?
c - 複合ステートメント内のアロカ
複合ステートメント内で alloca を使用することは可能ですか? 例:
私の経験から、それはうまく機能しますが、安全かどうかはわかりません。ところで、それはgcc 4.8.4でコンパイルされました
c - alloc、malloc、および alloca — 違いは何ですか?
alloc
私はObjective-Cで(呼び出し時に[anyObject alloc]
実際にC関数を実装し、メモリがヒープに割り当てられているという印象を受けましたがmalloc
、これに対する答えはどこにも見つかりませんでした.
また、 を検索しているときに、スタックにメモリを割り当てるものalloc
を見つけました。alloca
私が間違っていなければalloc
、ヒープにメモリを割り当ててオブジェクトを作成します。
alloc
では、とmalloc
(とalloca
)の違いは何ですか? 誰か要約してくれませんか?