5

私はマイクロコントローラを使って作業していました。私のアプリケーションで採用している RTOS には、free と malloc (および assert などの他の呼び出し) がありません。使用できる場合もありますが、システムにすべてを静的にすることを好みます。

私は線形代数を使い始めましたが、それらのほとんどは動的メモリを必要とします。私の行列は密で「小さい」(10x10以下)です。

私は Eigen が本当に好きですが (すべてがコンパイル時に静的に決定される可能性があります)、どうやら私の RTOS によって提供されないアサートを呼び出すバグがあるようです (-DNDEBUG を使用しても)。ライブラリは行列分解ルーチン (QR、Cholesky、LU など) を提供する必要があります。

私は C++ よりも C の方が好きです。助言がありますか?よろしくお願いします!

4

3 に答える 3

4

CLAPACKに何か問題がありますか?または、ストレート Fortran LAPACK (gcc の一部である gfortran でコンパイルできます)。

[C]LAPACK のルーチンは、引数内のすべてのメモリ バッファを既に割り当てられているものとして受け取り、ヒープの割り当てをまったく行いません。他の引数 (たとえば、SVD を計算するための dgesdd など) に加えて「作業」バッファーを受け取るルーチンの場合、通常、特別な「サイズのみ」の引数を指定して呼び出すことができ、応答として作業に必要なサイズを返すことができます。必要に応じて割り当てることができます。

于 2012-06-11T02:17:00.420 に答える
1

assert マクロを再定義することは良い解決策のようです。

ただし、独自の malloc と無料の実装を提供したり、適切なメモリ管理ライブラリと静的にリンクしたりすることもできます: http://blog.reverberate.org/2009/02/one-malloc-to-rule-them-all.html

于 2012-06-10T11:39:50.240 に答える
0

アプリケーションで Q16.16 の固定小数点演算が問題ない場合は、libfixmatrix をオプションとして使用できます。

https://github.com/PetteriAimonen/libfixmatrix

于 2012-12-04T08:12:05.057 に答える