我正在阅读R资源并尝试了解堆结构。我正在寻找PROTECT()的定义,但我已经建立了:
$ grep -rn "#define PROTECT(" *
src/include/Rinternals.h:642:#define PROTECT(s) Rf_protect(s)
然后
$ grep -rn "Rf_protect(" *
src/include/Rinternals.h:803:SEXP Rf_protect(SEXP);
src/include/Rinternals.h:1267:SEXP Rf_protect(SEXP);
但我没有找到Rf_protect()的定义。
感谢。
答案 0 :(得分:7)
Rf_
前缀是一种常见的习惯用法,它使这个普通的C代码具有命名空间的相似性。所以你想要寻找protect(...)
:
/usr/share/R/include/Rinternals.h:#define protect Rf_protect
并考虑到核心'这样,您也可以从src/main
开始,快速grep -c
引导您src/main/memory.c
。 Et voila on lines 3075 to 3081
SEXP protect(SEXP s)
{
if (R_PPStackTop >= R_PPStackSize)
R_signal_protect_error();
R_PPStack[R_PPStackTop++] = CHK(s);
return s;
}
现在说,您可能想要关注大部分文件,而不仅仅是这个函数。