swift 获取运行内存总量和剩余总量,磁盘总量和磁盘剩余大小
内存总量
ProcessInfo.processInfo.physicalMemory
剩余内存
func memoryUsage() -> String {
var vmStats: vm_statistics_data_t = vm_statistics_data_t()
var number: mach_msg_type_number_t = UInt32(MemoryLayout<vm_statistics_data_t>.size / MemoryLayout<integer_t>.size)
let status: kern_return_t = withUnsafeMutablePointer(to: &vmStats) {
$0.withMemoryRebound(to: integer_t.self, capacity: Int(number)) {
host_statistics(mach_host_self(), HOST_VM_INFO, $0, &number)
}
}
if status != KERN_SUCCESS {
return ""
}
let pageSize: Int64 = Int64(vm_page_size)
let availableMemorySize = (pageSize * Int64(vmStats.free_count + vmStats.inactive_count))
return String(availableMemorySize)
}
获取总量和磁盘剩余大小
// 磁盘总量
func getTotalDiskSize() -> Int64 {
var fs = blankof(type: statfs.self)
if statfs("/var",&fs) >= 0{
return Int64(UInt64(fs.f_bsize) * fs.f_blocks)
}
return -1
}
//磁盘剩余容量
func getAvailableDiskSize() -> Int64 {
var fs = blankof(type: statfs.self)
if statfs("/var",&fs) >= 0{
return Int64(UInt64(fs.f_bsize) * fs.f_bavail)
}
return -1
}
func blankof<T>(type:T.Type) -> T {
let ptr = UnsafeMutablePointer<T>.allocate(capacity: MemoryLayout<T>.size)
let val = ptr.pointee
return val
}