gpt4 book ai didi

c++ - 带有 exit(1) 调用的库的 Rcpp

转载 作者:行者123 更新时间:2023-11-30 01:53:28 25 4
gpt4 key购买 nike

我有一个包含在 Rcpp 中的混合 C [cblas]/C++ [库代码] 库(由其他人开发)。

许多方法的代码如下:

void myclass::calculate() {
double* dataSums = (double*) calloc(N, sizeof(double));
if(dataSums == NULL) { printf("Memory allocation failed!\n"); exit(1); }

// do some calculations ...
cblas_dgemm(...);
free(dataSums); dataSums = NULL;
}

当然,exit(1) 在这里是个问题:当从 R 调用时,它也会关闭 R,这是我不想要的。

确保以下内容的最佳方法是什么:

  • R 在发生错误时不会关闭(用异常替换 exit 调用?)
  • 之后正确清理了内存
  • cblas 尽可能保持高性能(使用 std::vectors 有问题吗?)
  • 对库的更改最少,因此更容易从上游更新

最佳答案

我会建议类似的东西

if (dataSums == NULL)  Rcpp::stop("Memory allocation failed!\n"); 

你有相应的 (C++) 层 try/catch 包裹着你的代码如果您使用 Rcpp 属性或内联,或者当您按照我们多年来提供的示例手动执行时。鉴于 C++ 异常层,您可以直接使用它。

如果您的代码层需要额外清理,您可以在那里添加该层。但是 C++ 数据结构将被正确展开。

关于c++ - 带有 exit(1) 调用的库的 Rcpp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23131268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com