iOS实际RAM与ProcessInfo.processInfo.physicalMemory之间的区别是否稳定?

时间:2017-04-30 13:24:53

标签: ios iphone swift ipad

我正在开发一款需要在低内存设备上进行定制的应用。可用的设备内存将通过以下方式快速给出:

ProcessInfo.processInfo.physicalMemory

例如:

  • iPhone SE提供2009.5 MB(2048 MB RAM)
  • iPhone 5s提供1000.0 MB(1024 MB RAM)
  • iPhone 6提供989.0 MB(1024 MB RAM)
  • iPhone 6+提供977.0 MB(1024 MB RAM)
  • iPhone 4s提供504.95 MB(512 MB RAM)

根据我的理解,delta被分配给GPU并取决于屏幕大小。

我是否可以相信给定的设备总能给我相同的physicalMemory金额?

(例如,iPhone 6总是为989.0 MB)

1 个答案:

答案 0 :(得分:1)

看起来physicalMemory与来自hw.physmem的{​​{1}}(或其等效的macOS)相同。

我能找到的最佳描述来自post comparing real/physical/user memory in FreeBSD

The amount of "usable" RAM for the OS.  This subtracts off
any spaces reserved by boot ROMs / BIOSes / what-have-you, and
in the case of (e.g.) FreeBSD-9 on amd64, the 1 TB direct-map
limit (which you must take care of manually with the loader's
hw.physmem setting).

This is what "phys mem" should be and mostly is. If you boot a machine with 1.5 TB of RAM but the OS is limited to 1 TB, hw.physmem should be 1 TB minus a bit for the BIOS, etc.

因此,它是设备上的实际内存减去不是iOS的内存所保留的内存。由于我们无法保证Apple不会更新任何这些系统,因此我们无法保证应用程序可用的物理内存将得到修复。所以我不会硬编码任何这些神奇的数字。你可以看一下检索"真实"系统调用的内存大小,但你也可以只使用内存桶,因为你知道物理总是低于但接近实际内存:

sysctl