我习惯使用微控制器。我在我的应用程序中使用的RTOS没有free和malloc(以及其他类似assert的调用),有时候它们可用,但我更喜欢在我的系统中使用Static。
我已经开始使用线性代数,但大多数都需要动态内存。我的矩阵很密集,很小(不超过10x10)。
我真的很喜欢Eigen(一切都可以在编译时决定静态),但显然有一个错误要求断言,我的RTOS不提供(即使使用-DNDEBUG)。图书馆 应提供矩阵分解程序(如QR,Cholesky,LU ...)
我更喜欢C而不是C ++。有什么建议? 非常感谢提前!
答案 0 :(得分:4)
CLAPACK有什么问题吗?甚至直接使用Fortran LAPACK(您可以使用gfortran编译它,这是gcc的一部分)。
[C] LAPACK的例程将已经分配的参数中的所有内存缓冲区都占用,并且不进行任何堆分配。对于除了其他参数之外还带有“工作”缓冲区的例程(例如,用于计算SVD的dgesdd),通常可以使用特殊的“仅限大小”参数调用它们,并返回以响应所需的工作大小缓冲区,然后您可以根据需要分配缓冲区。
答案 1 :(得分:1)
重新定义断言宏似乎是一个很好的解决方案。
但您甚至可以提供自己的malloc和免费实现或静态链接相应的内存管理库: http://blog.reverberate.org/2009/02/one-malloc-to-rule-them-all.html
答案 2 :(得分:0)
如果您的应用程序可以使用Q16.16定点数学,则libfixmatrix可以是一个选项: