web-dev-qa-db-ja.com

iOSのメモリ割り当て-アプリケーションで使用できるメモリの量は?

IOは、メモリ管理で非連続または連続の割り当てを使用しますか?ユーザーが128 MB以上を割り当てた場合、アプリは閉じられますか?または、ユーザーがメモリを割り当て、Deallocateメソッドで割り当て解除をミスしたかのように、メモリがiOSによって管理されますか?明確に定義されたデータ構造の割り当てを使用して、アプリケーションで120 MB以上を使用することは可能ですか?

39
senthilMuthu

個別のメモリ割り当てからのブロックは連続して割り当てられません(alloc、malloc、newなどの個別の呼び出し)。それ以外の場合、それらは連続して割り当てられます(mallocへの同じ呼び出しから、たとえば、新しいfloat [30])。 Appleによると、20MB以上のRAMを使用すると、メモリ使用量のためにアプリがシャットダウンするリスクがあります。しかし、実際には、約...

  • iPad 2で260 MBのRAM(RobCrollに感謝)
  • 合計512 MBのRAMを搭載したデバイスで170〜180MBのRAM(iPhone 4、iPod touch 4g)
  • 256 MBのRAMを搭載したデバイス(iPad、iPhone 3gs、iPod touch 3g)で40-80MBのRAM
  • RAMが128MBのみのデバイスで25 MB(IPhone 3g、iPhone 2g、iPod touch 1g-2g)

モバイルアプリケーションにそれほど多くのRAMが必要な場合は、データを一時ファイルに保存し、その上で処理を行う必要があります。これを行う簡単な方法は、メモリマップファイルを使用することです。

74
Skyler Saleh

メモリ<デバイスのRAM容量を使用できます

(たとえば、40 MbのRAMを使用していて、短い計算のために80 Mb以上を割り当てています)。この場合、iOSはすぐにアプリケーションを強制終了します。1

このツール でテストしているユーザーが見つけた結果のリスト:

デバイス:(クラッシュ量/合計量/合計の割合)2

  • iPad1:127MB/256MB/49%
  • iPad2:275MB/512MB/53%
  • iPad3:645MB/1024MB/62%
  • iPad4:585MB/1024MB/57%(iOS 8.1)
  • iPad Mini第1世代:297MB/512MB/58%
  • iPad Mini Retina:696MB/1024MB/68%(iOS 7.1)
  • iPad Air:697MB/1024MB/68%
  • iPad Air 2:1195MB/2048MB/58%(iOS 8.x)
  • iPad Pro 12.9:3064MB/3981MB/77%(iOS 9.3.2)
  • iPad Pro 9.7 ":1395MB/1971MB/71%(iOS 10.0.2(14A456))
  • iPod touch第4世代:130MB/256MB/51%(iOS 6.1.1)
  • iPod touch第5世代:286MB/512MB/56%(iOS 7.0)
  • iPhone4:325MB/512MB/63%
  • iPhone4S:286MB/512MB/56%
  • iPhone5:645MB/1024MB/62%
  • iPhone5S:646MB/1024MB/63%
  • iPhone6:645MB/1024MB/62%(iOS 8.x)
  • iPhone6 +:645MB/1024MB/62%(iOS 8.x)
  • iPhone6s:1396MB/2048MB/68%(iOS 9.2)
  • iPhone6s +:1195MB/2048MB/58%(理論的、未テスト)
  • iPhoneSE:1395MB/2048MB/69%(iOS 9.3)
  • iPhone 6s +:1392MB/2048MB/68%(iOS 10.2.1)
  • iPhone 7以降:2040MB/3072MB/66%(iOS 10.2.1)
  • iPhone X:1392/2785/50%(iOS 11.2.1)

1 https://stackoverflow.com/a/5887783/5181636

2 https://stackoverflow.com/a/15200855/5181636

詳細については、この 質問 を参照してください。

60
Dipen Chudasama

現在、iOSのメモリ管理は、アプリケーションの明確なメモリ制限なしで機能します。ただし、iOSがアプリにメモリをすぐに解放するように指示した場合、またはメモリが閉じられる場合に対処できます。

iOSのメモリ不足警告への対応

128MBはiOSにとって非常に大きなメモリブロックです。メモリ制限を超えて割り当てようとすると、通知なしにアプリケーションが閉じられます。

2
Evgeny Karpov

内部では、iOSはmallocとフレンドを使用してすべてのオブジェクトにメモリを割り当てるため、返されるメモリは確かに連続しています。利用可能な連続メモリよりも多くを割り当てようとすると、malloc呼び出しはNULLを返します(適切にチェックされていない場合、nullポインタにアクセスしようとすると、おそらく他の何かが失敗します)

2
Giuliano Galea

アプリのメモリ使用制限が128 MBかどうかはわかりません。しかし、より多くのメモリを消費すると、アプリケーションはメモリ警告を受け取ります。それらを処理し、後で作成できるキャッシュやその他のオブジェクトをクリアしても、アプリケーションは終了しません。それらを無視すると、アプリケーションは終了します。

0
Krishnan