PROTECT在分配时究竟应该包装什么?

埃迪

我现在重新阅读了有关多次编写R扩展的垃圾回收的知识,但仍然不了解这两种用法之间的区别:

SEXP var = PROTECT(allocVector(STRSXP, 100));

SEXP var;
PROTECT(var = allocVector(STRSXP, 100));

到目前为止,我的第一个运气不好,因为我的会话有时会崩溃(但是我在实际代码和入门指南本身中都看到了很多用法)。有人可以解释这两个作业之间的区别吗?

编辑:

经过一些试验,我认为我得出的结论是,以上两者之间没有区别,并且我认为碰撞行为的任何差异都是偶然的,但是希望有经验的人对此进行确认。

卡尔·福纳

这是严格等效的。这是PROTECT调用的功能(来自https://svn.r-project.org/R/trunk/src/main/memory.c

SEXP protect(SEXP s)
{
    if (R_PPStackTop >= R_PPStackSize)
    R_signal_protect_error();
    R_PPStack[R_PPStackTop++] = CHK(s);
    return s;
}

static R_INLINE SEXP CHK(SEXP x)
{
    /* **** NULL check because of R_CurrentExpr */
    if (x != NULL && TYPEOF(x) == FREESXP)
    error("unprotected object (%p) encountered (was %s)",
          x, sexptype2char(OLDTYPE(x)));
    return x;
}
#else
#define CHK(x) x
#endif

和from.include / Rinternals.h:

#define TYPEOF(x)   ((x)->sxpinfo.type)

如您所见,指针参数不变地返回,因此

var = PROTECT(p)
PROTECT(var = p)

等价的

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将服务帐户分配给Cloud Run服务时,究竟发生了什么?

来自分类Dev

当你通过已经分配的值指针传递时究竟会发生什么?

来自分类Dev

ESP.restart() 在 NodeMCU 中究竟应该做什么?

来自分类Dev

包装的ByteBuffer应该返回什么状态?

来自分类Dev

陈述“实施定义”时,究竟哪种软件属于“实施”?究竟什么是“实施”?

来自分类Dev

Flexbox无法在Safari上按预期方式包装。我究竟做错了什么?

来自分类Dev

当达到Surivor空间大小限制时,究竟发生了什么?

来自分类Dev

回发时TableRows究竟发生了什么?

来自分类Dev

包含头文件时究竟会发生什么?

来自分类Dev

究竟什么是java的决策时,轮数6.02E23?

来自分类Dev

使用talend时究竟需要什么火花?

来自分类Dev

Dropbox同步时究竟会做什么?

来自分类Dev

应该为`serialVersionUID`分配什么值?

来自分类Dev

SpriteKit Animation应该不会加载。我究竟做错了什么?

来自分类Dev

BMI计算器分配。C#。我究竟做错了什么?

来自分类Dev

Zeitgeist究竟索引了什么?

来自分类Dev

究竟什么是匿名文件

来自分类Dev

究竟什么是超级视图?

来自分类Dev

@serviceactivator 究竟做了什么?

来自分类Dev

困惑我什么时候应该分配malloc

来自分类Dev

代码似乎在分配时应该只是读取值

来自分类Dev

不剪时应该使用什么?

来自分类Dev

当我们声明双指针(** q)时,究竟是int / char是什么?

来自分类Dev

究竟是什么导致Android中出现“暂停时旋转”错误?

来自分类Dev

当用null读取时,究竟是<< / dev / null`是什么?

来自分类Dev

当curl有效时,python请求模块不起作用。我究竟做错了什么?

来自分类Dev

在XCode中将配置文件设置为“自动”时,究竟发生了什么?

来自分类Dev

究竟是什么决定了退出shell时后台作业是被杀死还是被杀死?

来自分类Dev

关闭计算机电源时,究竟会发生什么?

Related 相关文章

  1. 1

    将服务帐户分配给Cloud Run服务时,究竟发生了什么?

  2. 2

    当你通过已经分配的值指针传递时究竟会发生什么?

  3. 3

    ESP.restart() 在 NodeMCU 中究竟应该做什么?

  4. 4

    包装的ByteBuffer应该返回什么状态?

  5. 5

    陈述“实施定义”时,究竟哪种软件属于“实施”?究竟什么是“实施”?

  6. 6

    Flexbox无法在Safari上按预期方式包装。我究竟做错了什么?

  7. 7

    当达到Surivor空间大小限制时,究竟发生了什么?

  8. 8

    回发时TableRows究竟发生了什么?

  9. 9

    包含头文件时究竟会发生什么?

  10. 10

    究竟什么是java的决策时,轮数6.02E23?

  11. 11

    使用talend时究竟需要什么火花?

  12. 12

    Dropbox同步时究竟会做什么?

  13. 13

    应该为`serialVersionUID`分配什么值?

  14. 14

    SpriteKit Animation应该不会加载。我究竟做错了什么?

  15. 15

    BMI计算器分配。C#。我究竟做错了什么?

  16. 16

    Zeitgeist究竟索引了什么?

  17. 17

    究竟什么是匿名文件

  18. 18

    究竟什么是超级视图?

  19. 19

    @serviceactivator 究竟做了什么?

  20. 20

    困惑我什么时候应该分配malloc

  21. 21

    代码似乎在分配时应该只是读取值

  22. 22

    不剪时应该使用什么?

  23. 23

    当我们声明双指针(** q)时,究竟是int / char是什么?

  24. 24

    究竟是什么导致Android中出现“暂停时旋转”错误?

  25. 25

    当用null读取时,究竟是<< / dev / null`是什么?

  26. 26

    当curl有效时,python请求模块不起作用。我究竟做错了什么?

  27. 27

    在XCode中将配置文件设置为“自动”时,究竟发生了什么?

  28. 28

    究竟是什么决定了退出shell时后台作业是被杀死还是被杀死?

  29. 29

    关闭计算机电源时,究竟会发生什么?

热门标签

归档