5

我曾经与微控制器一起工作。我在我的应用程序中使用的 RTOS 没有 free 和 malloc(以及其他调用,如 assert),有时它们可​​能可用,但我更喜欢在我的系统中拥有所有静态。

我已经开始使用线性代数,但大多数都需要动态记忆。我的矩阵密集且“小”(不超过 10x10)。

我真的很喜欢 Eigen(一切都可以在编译时静态决定),但显然有一个 bug 需要我的 RTOS 未提供的断言(即使使用 -DNDEBUG)。该库应提供矩阵分解例程(如 QR、Cholesky、LU ...)

我更喜欢 C 而不是 C++。有什么建议么?提前谢谢了!

4

3 回答 3

4

CLAPACK 有什么问题吗?甚至是直接的 Fortran LAPACK(您可以使用 gfortran 编译它,它是 gcc 的一部分)。

[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 回答