我试图在没有堆分配的情况下使用Eigen
进行实时处理。
据我所知:
Matrix<double, Dynamic, Dynamic> allocates on the stack
Matrix<double, Dynamic, Dynamic, AutoAlign, 1, 1> allocates on the heap
and Matrix<double, 1, 1> allocates on the stack;
实时使用Eigen
的一种方法是在启动时调整矩阵,大尺寸,然后只使用这个尺寸的一小部分。
我的问题是:使用类似Rm.colPivHouseholderQr().solve(Rhs)
的函数,如何使用动态矩阵执行此类计算?
该功能将采用矩阵的整个尺寸进行操作,这是不好的,因为我们只想要处理这个尺寸的一部分。
我们显然也可以use .resize()
那么如何通过实时处理来执行操作呢?
答案 0 :(得分:0)
实时处理通常涉及按固定时间表重复进行相同的工作。然后,动态内存分配的一种方法是使用线性分配的连续内存块(池)。然后,您可以在处理期结束时将所有内存标记为空闲。分配成本为O(1),解除分配成本为O(1),对于给定的工作量,您可以轻松保证满足所有内存分配。因此,一种解决方案是使用自定义分配器。
答案 1 :(得分:0)
Rm.block<3, 3>(0,0).colPivHouseholderQr().solve(Rhs)