Skip to content

Commit 192e31a

Browse files
authored
Merge pull request #107 from slybart77/memory_report_macos
Fix to report memory usage as Activity Monitor on macOS.
2 parents 8d062a7 + abe531f commit 192e31a

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

osx/memory.cc

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,33 +28,38 @@ void mem_status( MemoryStatus & status )
2828
{
2929
// These values are in bytes
3030
u_int64_t total_mem;
31-
float used_mem;
31+
// float app_mem = 0.0f;
32+
// float cached_file_mem = 0.0f;
33+
float available_mem = 0.0f;
3234
float percentage_mem;
3335
float free_mem;
3436
float free_mem_in_gigabytes; // used to check if free mem < 1 GB
3537
//u_int64_t unused_mem;
3638

3739
vm_size_t page_size;
38-
vm_statistics_data_t vm_stats;
40+
vm_statistics64_data_t vm_stats; // Use 64-bit VM statistics
3941

4042
// Get total physical memory
4143
int mib[] = { CTL_HW, HW_MEMSIZE };
4244
size_t length = sizeof( total_mem );
4345
sysctl( mib, 2, &total_mem, &length, NULL, 0 );
4446

4547
mach_port_t mach_port = mach_host_self();
46-
mach_msg_type_number_t count = sizeof( vm_stats ) / sizeof( natural_t );
48+
49+
// Use HOST_VM_INFO64_COUNT as the count for vm_statistics64_data_t
50+
mach_msg_type_number_t count = HOST_VM_INFO64_COUNT;
51+
4752
if( KERN_SUCCESS == host_page_size( mach_port, &page_size ) &&
48-
KERN_SUCCESS == host_statistics( mach_port, HOST_VM_INFO,
53+
KERN_SUCCESS == host_statistics64( mach_port, HOST_VM_INFO64,
4954
( host_info_t )&vm_stats, &count )
5055
)
5156
{
5257
//unused_mem = static_cast<u_int64_t>( vm_stats.free_count * page_size );
53-
54-
used_mem = static_cast<float>(
55-
( vm_stats.active_count + vm_stats.wire_count ) * page_size);
58+
// app_mem = static_cast<float>(( vm_stats.internal_page_count - vm_stats.purgeable_count ) * page_size );
59+
// cached_file_mem = static_cast<float>(( vm_stats.purgeable_count + vm_stats.external_page_count ) * page_size );
60+
available_mem = static_cast<float>(( vm_stats.free_count + vm_stats.external_page_count - vm_stats.speculative_count ) * page_size );
5661
}
5762

58-
status.used_mem = convert_unit(static_cast< float >( used_mem ), MEGABYTES );
63+
status.used_mem = convert_unit(static_cast< float >(total_mem - available_mem ), MEGABYTES );
5964
status.total_mem = convert_unit(static_cast< float >( total_mem ), MEGABYTES );
6065
}

0 commit comments

Comments
 (0)