diff --git a/src/main/startup.c b/src/main/startup.c index 1d2a6755b5a..59c87af32ab 100644 --- a/src/main/startup.c +++ b/src/main/startup.c @@ -34,6 +34,11 @@ #include #endif +#ifdef __APPLE__ +# include +# include +#endif + /* These are used in ../gnuwin32/system.c, ../unix/sys-std.c */ SA_TYPE SaveAction = SA_SAVEASK; SA_TYPE RestoreAction = SA_RESTORE; @@ -251,6 +256,17 @@ void R_SizeFromEnv(Rstart Rp) R_size_t MinMaxVSize = 17179869184; /* 16 Gb */ Rp->max_vsize = sysmem > MinMaxVSize ? sysmem : MinMaxVSize; } +#elif defined(__APPLE__) && (SIZEOF_SIZE_T > 4) + else { + R_size_t sysmem = 0; + R_size_t len = sizeof(sysmem); + if (!sysctlbyname("hw.memsize", &sysmem, &len, NULL, 0) + && len == sizeof(sysmem)) { + + R_size_t MinMaxVSize = 17179869184; /* 16 Gb */ + Rp->max_vsize = sysmem > MinMaxVSize ? sysmem : MinMaxVSize; + } + } #endif if((p = getenv("R_VSIZE"))) { value = R_Decode2Long(p, &ierr);