gpt4 book ai didi

swift - 在 Swift 中获取计算机的可用/空闲 RAM

转载 作者:可可西里 更新时间:2023-11-01 01:36:30 24 4
gpt4 key购买 nike

我正在寻找 Swift 2.2 中可用/空闲计算机 RAM 的值。我读过 this answer by Viktor Latypov建议this question .不幸的是,问题询问的是“物理内存大小”(总内存,即 16 GB),但我正在寻找“可用/空闲内存”。

我还阅读了关于 NSProcessInfo 类的内容,但是 physicalMemory() 函数不是我要找的。

有什么想法吗?

最佳答案

在这上面花了太多钱,我无法再进一步了,所以我把我到目前为止的东西放在这里,希望有人能帮助改进它。

您可以在命令行中使用 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 可用,但如果应用程序需要的话,我可以使用更多的空间。不要忘记自 Mavericks (10.9) 以来可用的内存压缩!

关于swift - 在 Swift 中获取计算机的可用/空闲 RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36887594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com