これ以上過度に費やしてしまったので、私はこれ以上遠くまで行くことはできませんでした。
あなたはhost_statistics
とコマンドラインでvm_stat
と同様の結果を得ることができますが:
func vw_page_size() -> (kern_return_t, vm_size_t) {
var pageSize: vm_size_t = 0
let result = withUnsafeMutablePointer(&pageSize) { (size) -> kern_return_t in
host_page_size(mach_host_self(), size)
}
return (result, pageSize)
}
func vm_stat() -> (kern_return_t, vm_statistics) {
var vmstat = vm_statistics()
var count = UInt32(sizeof(vm_statistics)/sizeof(integer_t))
let result = withUnsafeMutablePointers(&vmstat, &count) { (stat, count) -> kern_return_t in
host_statistics(mach_host_self(), HOST_VM_INFO, host_info_t(stat), count)
}
return (result, vmstat)
}
let (result1, pageSize) = vw_page_size()
let (result2, vmstat) = vm_stat()
guard result1 == KERN_SUCCESS else {
fatalError("Cannot get VM page size")
}
guard result2 == KERN_SUCCESS else {
fatalError("Cannot get VM stats")
}
let total = (UInt(vmstat.free_count + vmstat.active_count + vmstat.inactive_count + vmstat.speculative_count + vmstat.wire_count) * pageSize) >> 30
let free = (UInt(vmstat.free_count) * pageSize) >> 20
print("total: \(total)GB")
print("free : \(free)MB")
総メモリは何NSProcessInfo
戻り未満に集計しました。 16GBのメモリを搭載した私のMacでは、返される合計は約15.6GBでした。
空きメモリを計算することはより問題が多い:非アクティブでパージ可能なページがたくさんあるが、空きページがなくなるまでMac OS Xはパージしたくない。だから、私はわずか450MBの利用可能なように見えますが、それが必要な場合私が使用できる多くのものがあります。そして、マーベリックス(10.9)以来利用可能なメモリ圧縮について忘れないでください!
これは簡単なことではありません。実際の例では、このソースコードを調べることができます:https://github.com/beltex/SystemKit – Moritz
コマンドラインに行くことができれば、 'vm_stat'があなたが探しているものを提供するかもしれません。 'man'ページで詳細を確認してください。 –
@code異なるもの私は 'vm_stat'についてよく知っています。むしろSwiftを使って空きRAM情報を取得するネイティブメソッドを探していましたが、他のネイティブメソッドがない場合、 'vm_stat'が最後の手段になるかもしれません。 – perhapsmaybeharry