2

我有一种方法负责获取 openGl 三角形网格并将其转换为 3ds 文件。这种方法称为exportShape(). 要执行此转换exportShape(),会创建一堆非常大的向量和 hash_map。目前,从调用的最后一行exportShape()代码到下一行代码exportShape()最多可能需要 5 分钟。我确信所有这些时间都花在了清空非常大的局部变量堆栈上,因为如果我将所有局部向量和 hash_maps 移动到全局范围,该方法会立即存在,正如我所期望的那样。

为什么我能够在几秒钟内填充所有这些本地数据结构,而将它们从堆栈中弹出需要几分钟?如何优化离开exportShape()和清除堆栈的过程?

编辑:

被删除的对象只包含字符串、双精度和整数——没有自定义析构函数。

我几乎解决了我自己的问题。在发布模式下运行是一个巨大的性能提升(~20 倍)。尽管如此,该过程仍会挂起几秒钟。还有什么可以做的吗?

4

1 回答 1

1

第一个实例的问题是您正在使用调试分配器,它用位模式(例如0xfdfdfdfd)标记释放的内存,以帮助检测对释放内存的访问。这显然需要时间,因为它必须遍历所有释放的内存。

为了进一步加快速度,您可以使用范围分配器,例如Boost Pool Library;另请参阅创建范围内的自定义内存池/分配器?

于 2012-12-11T16:59:12.250 回答