9

Guard Malloc を使用した解釈と問題解決に関する優れたチュートリアルはありますか?

「262144 バイトを VM に割り当てられませんでした」のようなメッセージが表示されますが、これが何を意味するのかわかりません。最初はシステムの RAM 不足だと思っていましたが、そうではないかもしれません。それが問題である場合、エラーを解釈してキャッチする方法を必死に学ぶ必要があります。

Guard Malloc に関するもう 1 つの質問は、それがプロジェクトの C コードに割り当てられたメモリを保護するのか (名前を考えると正しいはずです)、それとも Objective-C のみに適用されるのかということです。私が尋ねた理由は、NSZombieEnabled が Obj-C にのみ適用されることが分かったからです。

大変助かりました。私は何日もの間、メモリエラーの可能性をいじっていました。また、Valgrind を iOS 用にコンパイルすることはまだできていません。

4

3 に答える 3

5

1) 私は、アドレス空間の枯渇にガード malloc を使用して割り当ての失敗を記録してきました。すべての割り当ては、再利用できないアドレス空間の少なくとも 1 ページを占有します。現在割り当てられていないメモリを使用すると、guard malloc でクラッシュしますが、割り当ての失敗は発生しません。

2) 名前が示すように、ガード malloc は malloc(3) の実装を置き換えるため、malloc を使用する C コードがチェックされます。

ガード malloc は特効薬ではないことに注意してください。テストを通じてアプリのバグを明らかにする必要があります。Guard malloc は、クラッシュをより早く、より確実に発生させるだけです。

「man libgmalloc」も読みたいかもしれません。

于 2012-12-08T09:55:26.670 に答える
2

Guard Malloc が設定された ios シミュレーターでこれが実行されているのを見ていました。シミュレーターに 64 ビット デバイスを選択すると、エラーが発生しなくなりました。

于 2014-08-01T09:55:59.583 に答える
0

ご想像のとおり、「VM の割り当てに失敗しました」は、使用可能な RAM の不足です。

Mac で他のすべてのプログラムを閉じた場合にのみ、Guard Malloc を確実に使用できます。それでも、多くのメモリを使用する貪欲なプログラムで失敗することがあります。

次のことを行う必要があります。

  1. 追加の RAM を購入する
  2. Macで実行中の他のすべてのプログラムを閉じます
  3. プロファイリング/最適化により、プログラムが使用するメモリを削減します。
于 2013-06-29T15:11:44.607 に答える