29 #ifndef MEMORY_USAGE_INCLUDED
30 #define MEMORY_USAGE_INCLUDED
37 size_t TotalPhysicalMemory;
38 size_t FreePhysicalMemory;
39 size_t TotalSwapSpace;
41 size_t TotalVirtualAddressSpace;
42 size_t FreeVirtualAddressSpace;
48 ZeroMemory( &Mem,
sizeof(Mem));
49 ZeroMemory( &Info,
sizeof(Info));
50 Mem.dwLength =
sizeof(Mem);
51 ::GlobalMemoryStatusEx( &Mem );
52 ::GetSystemInfo( &Info );
54 TotalPhysicalMemory = (size_t)Mem.ullTotalPhys;
55 FreePhysicalMemory = (
size_t)Mem.ullAvailPhys;
56 TotalSwapSpace = (size_t)Mem.ullTotalPageFile;
57 FreeSwapSpace = (
size_t)Mem.ullAvailPageFile;
58 TotalVirtualAddressSpace = (size_t)Mem.ullTotalVirtual;
59 FreeVirtualAddressSpace = (
size_t)Mem.ullAvailVirtual;
60 PageSize = (size_t)Info.dwPageSize;
62 size_t usage(
void)
const {
return TotalVirtualAddressSpace-FreeVirtualAddressSpace;}
64 static size_t Usage(
void){
65 MEMORY_BASIC_INFORMATION mbi;
70 memset(&mbi, 0,
sizeof(MEMORY_BASIC_INFORMATION));
71 while(VirtualQuery(pvAddress, &mbi,
sizeof(MEMORY_BASIC_INFORMATION)) ==
sizeof(MEMORY_BASIC_INFORMATION)){
72 if(mbi.State == MEM_COMMIT && mbi.Type == MEM_PRIVATE){dwMemUsed += mbi.RegionSize;}
73 pvAddress = ((BYTE*)mbi.BaseAddress) + mbi.RegionSize;
81 #ifndef __APPLE__ // Linux variants
84 #include <sys/resource.h>
89 static size_t Usage(
void)
91 FILE* f = fopen(
"/proc/self/stat",
"rb");
96 unsigned long long llu;
104 fscanf(f,
"%d %255s %c %d %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %ld %ld %ld %ld %d %ld %llu %lu %ld %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %lu"
105 ,&pid ,s ,&c ,&d ,&d ,&d ,&d ,&d ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&ld ,&ld ,&ld ,&ld ,&d ,&ld ,&llu ,&vm ,&ld ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&d ,&d ,&lu ,&lu );
155 #else // __APPLE__: has no "/proc" pseudo-file system
165 #include <sys/types.h>
166 #include <sys/sysctl.h>
167 #include <mach/task.h>
168 #include <mach/mach_init.h>
170 void getres(task_t task,
unsigned long *rss,
unsigned long *vs)
172 struct task_basic_info t_info;
173 mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;
175 task_info(task, TASK_BASIC_INFO, (task_info_t)&t_info, &t_info_count);
176 *rss = t_info.resident_size;
177 *vs = t_info.virtual_size;
183 static size_t Usage(
void)
185 unsigned long rss, vs;
186 task_t task = MACH_PORT_NULL;
188 if (task_for_pid(current_task(), getpid(), &task) != KERN_SUCCESS)
190 getres(task, &rss, &vs);
200 #endif // MEMORY_USAGE_INCLUDE