0

malloc は NULL を返すため、VLA を使用してスタックにメモリが不足していることを検出する方法はありますか?

4

3 に答える 3

2

クラッシュすることを期待できますが、最悪のシナリオは、動作しているように見えて、別のメモリに書き込んでしまうことです。少なくともデフォルトでは、gcc はメモリが使用可能であることを確認しようとするコードを生成しません (ただし、そのためのオプションがあります)。MacOS では、スレッド化されたプロセスで 0.5MB の VLA が必要なだけで、誤って他のスレッドのスタックに書き込んでしまうことがあります。Linux では 10MB。

VLA が小さい (1 ページまたは 2 ページ未満) ことを保証できない場合は、使用しないでください。

于 2013-02-28T10:25:39.607 に答える
1

malloc()ヒープをチェックしVLAs、スタックサイズの増加に取り組みます。malloc()リターンのチャンスがあればNULL、スタックもいっぱいになります。

WhozCraigが指摘しているように、VLAでギャンブルをしないでください。配列サイズが大きい場合-使用malloc()

于 2013-02-28T09:34:09.560 に答える
1

C には、VLA の宣言やメモリ使用量に関する失敗のチェックが成功することを保証するものは何もありません。これは、VLA であろうとなかろうと、自動オブジェクトの宣言でも同じです。

于 2013-02-28T09:55:30.973 に答える