http://nadeausoftware.com/articles/2012/09/c_c_tip_how_get_physical_memory_size_system#sysinfonbsp
On Linux, the sysinfo( )
function fills a sysinfo
struct with system statistics. The struct has the following fields:
struct sysinfo { long uptime; /* Seconds since boot */ unsigned long loads[3]; /* 1, 5, and 15 minute load averages */ unsigned long totalram; /* Total usable main memory size */ unsigned long freeram; /* Available memory size */ unsigned long sharedram; /* Amount of shared memory */ unsigned long bufferram; /* Memory used by buffers */ unsigned long totalswap; /* Total swap space size */ unsigned long freeswap; /* swap space still available */ unsigned short procs; /* Number of current processes */ unsigned long totalhigh; /* Total high memory size */ unsigned long freehigh; /* Available high memory size */ unsigned int mem_unit; /* Memory unit size in bytes */ char _f[20-2*sizeof(long)-sizeof(int)]; /* Padding for libc5 */ };
Prior to Linux 2.3.23 (late 2003), the sysinfo
struct omitted the last four fields and all sizes were in bytes. Today, the larger struct is used and all sizes are in units given by the mem_unit
field. The totalram
field times the mem_unit
field gives the size of physical memory in bytes.
The memory size computed from the sysinfo
struct is the same as that computed from sysconf( )
and the page size (see above). Since the method is redundant, this article's getMemorySize( )
function uses sysconf( )
instead of sysinfo( )
.
Availability: Linux.
Get memory size:
#include <sys/sysinfo.h> ... struct sysinfo info; sysinfo( &info ); return (size_t)info.totalram * (size_t)info.mem_unit;