【发布时间】:2011-12-13 12:56:48
【问题描述】:
我已经为光线追踪应用程序实现了一个专门的树形数据结构。我在树的每个节点中使用 std::list 来存储数据项。我在运行应用程序时遇到问题,使用此数据结构不仅会使应用程序崩溃,而且会冻结整个操作系统(Windows 7)。这仅在发布模式下发生;在调试模式下,它需要更长的时间(正如预期的那样)但工作正常。我使用的是 Visual Studio 2010。在发布模式下运行 (Ctrl+F5) 或调试 (F5) 都会导致整个系统崩溃。
从我目前发现的情况来看,发布模式和调试模式之间的不同行为似乎归因于内存泄漏,因为调试模式(据我所知)更宽容一些。但是我没有发现 C++ 应用程序会导致操作系统崩溃。
我只想知道在什么情况下会发生这种行为,所以我知道去哪里找。很难将问题简化为简单的问题并追踪问题,因为光线追踪的本质是高度并行并处理大量数据。
哦,问题是不是导致堆栈溢出的无限递归。我是故意这样做的,它并没有使操作系统崩溃。
【问题讨论】:
-
从用户空间代码中冻结 Windows 7 的壮举。你说它是大规模并行和大量数据,可能是你的资源耗尽,导致整个系统几乎停滞不前。我已经让应用程序通过运行所有可用的 RAM 和交换来关闭 linux 机器,成为切换到终端并尝试终止应用程序的 3 分钟任务。
-
如果您的代码是可移植的,请尝试在更稳定的操作系统上编译它并查找错误原因。通过使操作系统崩溃进行调试需要很长时间。
-
如果你构建带有调试信息的发布版本,它可以正常工作吗?否则,它可能会帮助您缩小崩溃发生的范围。
-
另外,你没有任何代码依赖于
DEBUG/NDEBUG宏? -
您使用的是 GPU 资源吗?尝试更新机器上的图形驱动程序?
标签: c++ visual-studio-2010 visual-c++ rendering