2024-09-30 18:27:35 发布
网友
我用Python使用Sigg调用C++中的函数MyActuple()。每次调用myfunc()时,我都要生成同样大的稀疏矩阵。相反,我想做的是创建一次矩阵,然后将矩阵的指针传递给python,而不是每次重新分配空间。我担心的是这会导致某种内存泄漏。你知道吗
最好的方法是什么?你知道吗
矩阵是Eigen::SparseMatrix的一部分。你知道吗
简单地来回传递一个指针是否省钱?Python不知道如何处理它,但是只要空间保持分配,我能在C++中重用指针吗?你知道吗
这正是swig处理未知对象的方式:它传递指向对象的指针以及一些类型信息(字符串)。如果函数以该类型的指针作为参数,swig会很高兴地将该指针传递给它。参见swig文档here。你知道吗
您只需确保类型匹配,即不能将say a MatrixXd*传递给python,并在采用MatrixBase<MatrixXd>*的函数中使用它,因为swig不知道这些类型是兼容的。你知道吗
MatrixXd*
MatrixBase<MatrixXd>*
此外,对于未知对象(至少指向这样的指针),SWIG将不执行任何内存管理,因此需要在C++侧分配和释放对象。你知道吗
这正是swig处理未知对象的方式:它传递指向对象的指针以及一些类型信息(字符串)。如果函数以该类型的指针作为参数,swig会很高兴地将该指针传递给它。参见swig文档here。你知道吗
您只需确保类型匹配,即不能将say a
MatrixXd*
传递给python,并在采用MatrixBase<MatrixXd>*
的函数中使用它,因为swig不知道这些类型是兼容的。你知道吗此外,对于未知对象(至少指向这样的指针),SWIG将不执行任何内存管理,因此需要在C++侧分配和释放对象。你知道吗
相关问题 更多 >
编程相关推荐