Eigen的aligned_allocator


今天看ORBSLAM2中的OptimizeEssentialGraph()函數時,對一句代碼中的aligned_allocator不太清楚:

vector<g2o::Sim3,Eigen::aligned_allocator<g2o::Sim3> >

百度查找了一些資料,記錄如下:

如果STL容器中的元素是Eigen的數據結構,例如這里定義一個vector容器,元素是Matrix4d ,如下所示:

vector <Eigen::Matrix4d>;

編譯不會出錯,但在運行的時候出錯。解決的方法很簡單,定義改成下面的方式:

vector<Eigen::Matrix4d,Eigen::aligned_allocator<Eigen::Matrix4d>>;

其實上述的這段代碼才是標准的定義容器方法,只是我們一般情況下定義容器的元素都是C++中的類型,所以可以省略,這是因為在C++11標准中,aligned_allocator管理C++中的各種數據類型的內存方法是一樣的,可以不需要着重寫出來。但是在Eigen管理內存和C++11中的方法是不一樣的,所以需要單獨強調元素的內存分配和管理。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM