1
我有一个混合的C [cblas]/C++ [库代码]库(由其他人开发),我已经包装在Rcpp中。Rcpp for library with exit(1)calls
许多方法都类似下面的代码:
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下来为好,这是我不想要什么。
是什么,以确保最好的办法:(?更换exit
电话有例外)
- R不关机,当发生错误后
- cblas
- 内存进行适当的清理尽可能保持性能(使用
std::vector
s是否有问题?) - 对库的更改很少,因此更容易从上游进行更新
呃。请注意,一些CBLAS实现(例如OpenBLAS)在内存不足时也会“退出”/“中止”/ segfault,因此正确解决此问题可能比您想象的要困难。 –