You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							68 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							68 lines
						
					
					
						
							2.0 KiB
						
					
					
				| /* | |
|  * Author:  David Robert Nadeau | |
|  * Site:    http://NadeauSoftware.com/ | |
|  * License: Creative Commons Attribution 3.0 Unported License | |
|  *          http://creativecommons.org/licenses/by/3.0/deed.en_US | |
|  */ | |
| 
 | |
| /* | |
|  * Modified by Tom van Dijk to remove WIN32 and solaris code | |
|  */ | |
| 
 | |
| #if defined(__APPLE__) && defined(__MACH__) | |
| #include <unistd.h> | |
| #include <sys/resource.h> | |
| #include <mach/mach.h> | |
| #elif defined(__linux__) || defined(__linux) || defined(linux) || defined(__gnu_linux__) | |
| #include <unistd.h> | |
| #include <sys/resource.h> | |
| #include <stdio.h> | |
| #else | |
| #error "Cannot define getPeakRSS( ) or getCurrentRSS( ) for an unknown OS." | |
| #endif | |
|  | |
| /** | |
|  * Returns the peak (maximum so far) resident set size (physical | |
|  * memory use) measured in bytes, or zero if the value cannot be | |
|  * determined on this OS. | |
|  */ | |
| size_t | |
| getPeakRSS() | |
| { | |
|     struct rusage rusage; | |
|     getrusage(RUSAGE_SELF, &rusage); | |
| #if defined(__APPLE__) && defined(__MACH__) | |
|     return (size_t)rusage.ru_maxrss; | |
| #else | |
|     return (size_t)(rusage.ru_maxrss * 1024L); | |
| #endif | |
| } | |
| 
 | |
| /** | |
|  * Returns the current resident set size (physical memory use) measured | |
|  * in bytes, or zero if the value cannot be determined on this OS. | |
|  */ | |
| size_t | |
| getCurrentRSS() | |
| { | |
| #if defined(__APPLE__) && defined(__MACH__) | |
|     /* OSX ------------------------------------------------------ */ | |
|     struct mach_task_basic_info info; | |
|     mach_msg_type_number_t infoCount = MACH_TASK_BASIC_INFO_COUNT; | |
|     if (task_info(mach_task_self(), MACH_TASK_BASIC_INFO, (task_info_t)&info, &infoCount) != KERN_SUCCESS) | |
|         return (size_t)0L;      /* Can't access? */ | |
|     return (size_t)info.resident_size; | |
| #else | |
|     /* Linux ---------------------------------------------------- */ | |
|     long rss = 0L; | |
|     FILE *fp = NULL; | |
|     if ((fp = fopen("/proc/self/statm", "r")) == NULL) | |
|         return (size_t)0L;      /* Can't open? */ | |
|     if (fscanf(fp, "%*s%ld", &rss) != 1) { | |
|         fclose(fp); | |
|         return (size_t)0L;      /* Can't read? */ | |
|     } | |
|     fclose(fp); | |
|     return (size_t)rss * (size_t)sysconf(_SC_PAGESIZE); | |
| #endif | |
| }
 |