| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #ifndef MEMORY_USAGE_INCLUDED |
| | #define MEMORY_USAGE_INCLUDED |
| |
|
| | #ifdef WIN32 |
| |
|
| | #include <Windows.h> |
| | class MemoryInfo |
| | { |
| | public: |
| | size_t TotalPhysicalMemory; |
| | size_t FreePhysicalMemory; |
| | size_t TotalSwapSpace; |
| | size_t FreeSwapSpace; |
| | size_t TotalVirtualAddressSpace; |
| | size_t FreeVirtualAddressSpace; |
| | size_t PageSize; |
| |
|
| | void set(void){ |
| | MEMORYSTATUSEX Mem; |
| | SYSTEM_INFO Info; |
| | ZeroMemory( &Mem, sizeof(Mem)); |
| | ZeroMemory( &Info, sizeof(Info)); |
| | Mem.dwLength = sizeof(Mem); |
| | ::GlobalMemoryStatusEx( &Mem ); |
| | ::GetSystemInfo( &Info ); |
| |
|
| | TotalPhysicalMemory = (size_t)Mem.ullTotalPhys; |
| | FreePhysicalMemory = (size_t)Mem.ullAvailPhys; |
| | TotalSwapSpace = (size_t)Mem.ullTotalPageFile; |
| | FreeSwapSpace = (size_t)Mem.ullAvailPageFile; |
| | TotalVirtualAddressSpace = (size_t)Mem.ullTotalVirtual; |
| | FreeVirtualAddressSpace = (size_t)Mem.ullAvailVirtual; |
| | PageSize = (size_t)Info.dwPageSize; |
| | } |
| | size_t usage(void) const {return TotalVirtualAddressSpace-FreeVirtualAddressSpace;} |
| |
|
| | static size_t Usage(void){ |
| | MEMORY_BASIC_INFORMATION mbi; |
| | size_t dwMemUsed = 0; |
| | PVOID pvAddress = 0; |
| |
|
| |
|
| | memset(&mbi, 0, sizeof(MEMORY_BASIC_INFORMATION)); |
| | while(VirtualQuery(pvAddress, &mbi, sizeof(MEMORY_BASIC_INFORMATION)) == sizeof(MEMORY_BASIC_INFORMATION)){ |
| | if(mbi.State == MEM_COMMIT && mbi.Type == MEM_PRIVATE){dwMemUsed += mbi.RegionSize;} |
| | pvAddress = ((BYTE*)mbi.BaseAddress) + mbi.RegionSize; |
| | } |
| | return dwMemUsed; |
| | } |
| | }; |
| |
|
| | #else |
| |
|
| | #ifndef __APPLE__ |
| |
|
| | #include <sys/time.h> |
| | #include <sys/resource.h> |
| |
|
| | class MemoryInfo |
| | { |
| | public: |
| | static size_t Usage(void) |
| | { |
| | FILE* f = fopen("/proc/self/stat","rb"); |
| | |
| | int d; |
| | long ld; |
| | unsigned long lu; |
| | unsigned long long llu; |
| | char s[1024]; |
| | char c; |
| | |
| | int pid; |
| | unsigned long vm; |
| |
|
| | int n = fscanf(f, "%d %s %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" |
| | ,&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 ); |
| |
|
| | fclose(f); |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | return vm; |
| | } |
| |
|
| | }; |
| | #else |
| |
|
| | |
| | |
| | |
| | |
| |
|
| | #include <unistd.h> |
| | #include <stdio.h> |
| | #include <stdlib.h> |
| | #include <sys/types.h> |
| | #include <sys/sysctl.h> |
| | #include <mach/task.h> |
| | #include <mach/mach_init.h> |
| |
|
| | void getres(task_t task, unsigned long *rss, unsigned long *vs) |
| | { |
| | struct task_basic_info t_info; |
| | mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT; |
| |
|
| | task_info(task, TASK_BASIC_INFO, (task_info_t)&t_info, &t_info_count); |
| | *rss = t_info.resident_size; |
| | *vs = t_info.virtual_size; |
| | } |
| |
|
| | class MemoryInfo |
| | { |
| | public: |
| | static size_t Usage(void) |
| | { |
| | unsigned long rss, vs, psize; |
| | task_t task = MACH_PORT_NULL; |
| |
|
| | if (task_for_pid(current_task(), getpid(), &task) != KERN_SUCCESS) |
| | abort(); |
| | getres(task, &rss, &vs); |
| | return rss; |
| | } |
| |
|
| | }; |
| |
|
| | #endif |
| |
|
| | #endif |
| |
|
| | #endif |
| |
|