Changeset adde5c1 in OpenModelica
- Timestamp:
- 2013-08-26T08:35:50+02:00 (11 years ago)
- Branches:
- Added-citation-metadata, maintenance/v1.14, maintenance/v1.15, maintenance/v1.16, maintenance/v1.17, maintenance/v1.18, maintenance/v1.19, maintenance/v1.20, maintenance/v1.21, maintenance/v1.22, maintenance/v1.23, master, omlib-staging
- Children:
- 6d92f1f6
- Parents:
- 05a82d6
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Compiler/runtime/getMemorySize.c
r05a82d6 radde5c1 31 31 { 32 32 #if defined(_WIN32) && (defined(__CYGWIN__) || defined(__CYGWIN32__)) 33 34 35 36 37 38 33 /* Cygwin under Windows. ------------------------------------ */ 34 /* New 64-bit MEMORYSTATUSEX isn't available. Use old 32.bit */ 35 MEMORYSTATUS status; 36 status.dwLength = sizeof(status); 37 GlobalMemoryStatus( &status ); 38 return (size_t)status.dwTotalPhys; 39 39 40 40 #elif defined(_WIN32) 41 42 43 44 45 46 41 /* Windows. ------------------------------------------------- */ 42 /* Use new 64-bit MEMORYSTATUSEX, not old 32-bit MEMORYSTATUS */ 43 MEMORYSTATUSEX status; 44 status.dwLength = sizeof(status); 45 GlobalMemoryStatusEx( &status ); 46 return (size_t)status.ullTotalPhys; 47 47 48 48 #elif defined(__unix__) || defined(__unix) || defined(unix) || (defined(__APPLE__) && defined(__MACH__)) 49 50 49 /* UNIX variants. ------------------------------------------- */ 50 /* Prefer sysctl() over sysconf() except sysctl() HW_REALMEM and HW_PHYSMEM */ 51 51 52 52 #if defined(CTL_HW) && (defined(HW_MEMSIZE) || defined(HW_PHYSMEM64)) 53 54 53 int mib[2]; 54 mib[0] = CTL_HW; 55 55 #if defined(HW_MEMSIZE) 56 56 mib[1] = HW_MEMSIZE; /* OSX. --------------------- */ 57 57 #elif defined(HW_PHYSMEM64) 58 58 mib[1] = HW_PHYSMEM64; /* NetBSD, OpenBSD. --------- */ 59 59 #endif 60 61 62 63 64 return 0L;/* Failed? */60 int64_t size = 0; /* 64-bit */ 61 size_t len = sizeof( size ); 62 if ( sysctl( mib, 2, &size, &len, NULL, 0 ) == 0 ) 63 return (size_t)size; 64 return 0L; /* Failed? */ 65 65 66 66 #elif defined(_SC_AIX_REALMEM) 67 68 67 /* AIX. ----------------------------------------------------- */ 68 return (size_t)sysconf( _SC_AIX_REALMEM ) * (size_t)1024L; 69 69 70 70 #elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGESIZE) 71 72 73 71 /* FreeBSD, Linux, OpenBSD, and Solaris. -------------------- */ 72 return (size_t)sysconf( _SC_PHYS_PAGES ) * 73 (size_t)sysconf( _SC_PAGESIZE ); 74 74 75 75 #elif defined(_SC_PHYS_PAGES) && defined(_SC_PAGE_SIZE) 76 77 78 76 /* Legacy. -------------------------------------------------- */ 77 return (size_t)sysconf( _SC_PHYS_PAGES ) * 78 (size_t)sysconf( _SC_PAGE_SIZE ); 79 79 80 80 #elif defined(CTL_HW) && (defined(HW_PHYSMEM) || defined(HW_REALMEM)) 81 82 83 81 /* DragonFly BSD, FreeBSD, NetBSD, OpenBSD, and OSX. -------- */ 82 int mib[2]; 83 mib[0] = CTL_HW; 84 84 #if defined(HW_REALMEM) 85 mib[1] = HW_REALMEM;/* FreeBSD. ----------------- */85 mib[1] = HW_REALMEM; /* FreeBSD. ----------------- */ 86 86 #elif defined(HW_PYSMEM) 87 mib[1] = HW_PHYSMEM;/* Others. ------------------ */87 mib[1] = HW_PHYSMEM; /* Others. ------------------ */ 88 88 #endif 89 unsigned int size = 0;/* 32-bit */90 91 92 93 return 0L;/* Failed? */89 unsigned int size = 0; /* 32-bit */ 90 size_t len = sizeof( size ); 91 if ( sysctl( mib, 2, &size, &len, NULL, 0 ) == 0 ) 92 return (size_t)size; 93 return 0L; /* Failed? */ 94 94 #endif /* sysctl and sysconf variants */ 95 95 96 96 #else 97 return 0L;/* Unknown OS. */97 return 0L; /* Unknown OS. */ 98 98 #endif 99 99 }
Note: See TracChangeset
for help on using the changeset viewer.