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,因此正確解決此問題可能比您想象的要困難。 –