【发布时间】:2012-12-11 16:27:27
【问题描述】:
我有一个方法负责获取 openGl 三角形网格并将其转换为 3ds 文件。此方法称为exportShape()。为了执行这个转换exportShape() 创建了一堆非常大的向量和 hash_maps。目前,从exportShape() 的最后一行到调用exportShape() 的下一行代码最多可能需要5 分钟。我确信所有这些时间都花在清空非常大的局部变量堆栈上,因为如果我将所有局部向量和 hash_maps 移动到全局范围,该方法会立即存在,正如我所期望的那样。
为什么我能够在几秒钟内填充所有这些本地数据结构,而将它们从堆栈中弹出需要几分钟?如何优化离开exportShape() 并清除堆栈的过程?
编辑:
被删除的对象只包含字符串、双精度和整数——没有自定义析构函数。
我几乎解决了我自己的问题。在发布模式下运行是巨大的性能提升(~20 倍)。尽管如此,该过程仍会挂起几秒钟。还有什么可以做的吗?
【问题讨论】:
-
大部分时间可能是在破坏
vectors/hash_maps的元素。所以也许你应该告诉我们你在里面放了什么,以及这些对象是否有昂贵的析构函数。 -
所以,你应该给我们一个SSCCE 你的函数
exportShape()。 -
如果您将堆栈对象移动到全局范围,它们的析构函数将在程序退出之前不会被调用 - 这解释了性能差异。
-
"被删除的对象只包含字符串、双精度和整数 - 没有自定义析构函数。" - 字符串有一个自定义析构函数。
-
@Mysticial,你认为这会是瓶颈吗?
标签: c++ optimization stack