在Swift中获取计算机的可用/可用RAM

在Swift中获取计算机的可用/可用RAM,swift,swift2,ram,Swift,Swift2,Ram,我希望在Swift 2.2中获得可用/免费计算机RAM的价值。我已经读过了。不幸的是,这个问题问的是“物理内存大小”(总内存,即16GB),但我要的是“可用/可用内存” 我也读过NSProcessInfo类,但是physicalMemory()函数不是我想要的 有什么想法吗?在这方面花了太多的钱后,我不能再进一步了,所以我把我迄今为止的东西放在这里,希望有人能帮助改进它 使用host\u statistics,您可以在命令行上获得类似于vm\u stat的结果: func vw_page_siz

我希望在Swift 2.2中获得可用/免费计算机RAM的价值。我已经读过了。不幸的是,这个问题问的是“物理内存大小”(总内存,即16GB),但我要的是“可用/可用内存”

我也读过
NSProcessInfo
类,但是
physicalMemory()
函数不是我想要的


有什么想法吗?

在这方面花了太多的钱后,我不能再进一步了,所以我把我迄今为止的东西放在这里,希望有人能帮助改进它

使用
host\u statistics
,您可以在命令行上获得类似于
vm\u 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


计算可用内存的问题更大:有很多非活动和可清除的页面,但MacOSX不喜欢清除它们,直到没有更多的可用页面。所以,虽然看起来我只有450MB可用空间,但如果某个应用需要,我还可以使用更多的空间。不要忘了内存压缩,它是从Mavericks(10.9)开始提供的

这不是一件小事。作为一个工作示例,您可以检查以下源代码:如果您不介意转到命令行,
vm_stat
可能会提供您想要的内容。查看其
man
页面了解更多信息details@Code不同的是我熟悉的
vm\u stat
。我一直在寻找一种通过Swift获取免费RAM信息的本地方法,不过如果没有其他本地方法的话,
vm_stat
可能是最后的选择。我认为你必须深入研究Mach内核才能做到这一点。退房