4

私はこの問題をグーグルで検索し、R 拡張機能のマニュアルを調べましたが、それに関する情報は見つかりませんでした。

.C を使用して C コードを多数呼び出すかなり大きなプログラムがあります。プログラムの過程で変化しないかなりの量のデータを渡しています。したがって、一度だけ正しいデータ型に強制することにしました。

vec = as.integer(as.vector(vec))。

次に、.C 呼び出しで次のように記述します。

.C('関数', vec = vec)

とは対照的に

.C('関数', vec = as.integer(as.vector(vec)))。

これは、プロファイリングが as.* に少し時間がかかっていることが明らかになったときに行われました。ただし、これを行うと、(数十万回の繰り返しの後) malloc で glibc エラーが発生します。

* glibc が検出されました/usr/lib/R/bin/exec/R: malloc(): メモリ破損: 0x0cabc0d8 * *

最初に強制したオブジェクトがプログラムの過程で変化しないことを見て、これを回避する方法があれば、 as.* 呼び出しを最小限に抑えることができます。

ありがとう、

クリス

4

1 に答える 1

0

ほとんどの場合、C 関数にバグがあるか、引数として取得した整数ベクトルを解放しようとしていますが、これはすべきではありません。とにかく、これはベクトルを事前に変換するという事実とは関係ありません。

ベクトルの長さを関数にどのように指定しますか?

于 2013-07-03T09:15:50.593 に答える