至少在编写本文(4.5.0)时的R-devel之后
Memory
涵盖的章节
R_MAX_VSIZE
已更新以包括其值
应该
是
矢量堆限制以字节为单位。
然而,在R的源代码中(至少
mirror
的),我们可以看到从环境变量中检索到的值被传递到
R_Decode2Long
:
if ((p = getenv("R_MAX_VSIZE"))) {
value = R_Decode2Long(p, &ierr);
在这个函数的
definition
,单位为(即100G、20M等)的值也被解释为:
R_size_t R_Decode2Long(char *p, int *ierr)
{
R_size_t v = strtol(p, &p, 10);
*ierr = 0;
if(p[0] == '\0') return v;
/* else look for letter-code ending : */
if(R_Verbose)
REprintf("R_Decode2Long(): v=%ld\n", (long)v);
// NOTE: currently, positive *ierr are not differentiated in the callers:
if(p[0] == 'G') {
if((Giga * (double)v) > (double) R_SIZE_T_MAX) { *ierr = 4; return(v); }
return (R_size_t) Giga * v;
}
else if(p[0] == 'M') {
if((Mega * (double)v) > (double) R_SIZE_T_MAX) { *ierr = 1; return(v); }
return (R_size_t) Mega * v;
}
else if(p[0] == 'K') {
if((1024 * (double)v) > (double) R_SIZE_T_MAX) { *ierr = 2; return(v); }
return (1024*v);
}
else if(p[0] == 'k') {
if((1000 * (double)v) > (double) R_SIZE_T_MAX) { *ierr = 3; return(v); }
return (1000*v);
}
else {
*ierr = -1;
return(v);
}
}