void freeCloudInfoMemory()
{
cloudInfo.startRingIndex.clear();
cloudInfo.startRingIndex.shrink_to_fit(); // 从原来最大容量减少到现在所需要的容量(释放数组的容量)
cloudInfo.endRingIndex.clear();
cloudInfo.endRingIndex.shrink_to_fit();
cloudInfo.pointColInd.clear();
cloudInfo.pointColInd.shrink_to_fit();
cloudInfo.pointRange.clear();
cloudInfo.pointRange.shrink_to_fit();
}
1.clear():仅仅将容器中的元素释放掉,会导致size=0,但是容器容量capacity是不会变的,即数组的占用内存没有发生变化。
2.shrink_to_fit():将容器的容量capacity设置为容器中元素的size,即,收缩到合适的容量。
另外还有一个函数 swap() 是将容器底层的动态数组指针进行交换,然后把各自的size以及capacity的值进行交换。
在LVI-SAM中cloudinfo是LVI-SAM自定义格式的点云,包含了大量的数据内容,需要占用大量的内存空间。imageProjection节点把原始的无序点云,进行了去畸变和有序化,并且设置了大量的索引用来方便遍历查找特征点,还保留了距离信息用来筛除一些特殊点云点。这些数据对于featureExtraction节点是必要的,但是对于后续的过程没有意义,而且重新创建一个cloudinfo实例是不方便的,因此在发布话题之前,lvi-sam对cloudInfo进行了一次**“瘦身”,以提高后面的运行效率**。