我在 python 中使用 swig 来调用用 C++ 编写的函数 myfunc()。每次调用 myfunc() 时,我都必须生成相同的巨大稀疏矩阵。相反,我想做的是创建一次矩阵,然后将矩阵的指针传递给 python,而不是每次都重新分配空间。我担心的是这可能会导致某种内存泄漏。
最好的方法是什么?
矩阵是 Eigen::SparseMatrix 的一部分。
是否可以简单地来回传递指针来节省时间? Python 不知道如何处理它,但只要空间保持分配状态,我就能在 C++ 中重用指针吗?
最佳答案
这正是 swig 处理未知对象的方式:它传递指向对象的指针以及一些类型信息(字符串)。如果一个函数采用该类型的指针作为参数,swig 会很乐意将那个指针传递给它。请参阅 swig 文档 here .
您只需确保类型匹配,即您不能传递 MatrixXd*
。到 python 并在函数中使用它 MatrixBase<MatrixXd>*
,因为 swig 不知道这些类型是兼容的。
此外,对于未知对象(至少是指向此类对象的指针),swig 不会进行任何内存管理,因此您需要在 C++ 端分配和释放对象。
关于python - Swig - 存储未知对象直到下一次调用 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33892379/