我有一个很长的C++程序,由几千行代码,几个类,函数等组成。这个程序基本上是从输入文件中读取信息,运行算法,并将结果写入输出文件。
今天我意识到程序的运行时间经常会有很大的变化。所以我做了一个小测试,重新启动我的计算机,关闭所有其他可能的东西,并使用相同的输入文件连续运行代码5次。运行时间分别为50、80、130、180、190秒。
在这种情况下,我的第一个猜测是未删除的动态记忆。但我在整个代码中只使用了两次动态数组,而且我确信我删除了这些数组。
你们对此有什么解释吗?我正在Windows 7计算机上使用Visual Studio 2010。
发布于 2013-01-31 11:08:16
注意从visual studio调试器中运行程序,因为LFH (低碎片堆)内存分配器在这种情况下是禁用的。在VS外部试用该软件。
我见过这样的情况,任务通常需要几秒钟才能完成,仅仅从visual studio中运行就需要几个小时。
最重要的是,如果你仍然不知道发生了什么,那就分而治之吧。检测应用程序以查看子系统的运行时,或者只是将调试计时器放在不同的区域,以查看执行时间在哪里发生了巨大变化,并从那里深入。如果是内存分配器的问题,你通常会在释放数组的时候看到很大的运行时。
发布于 2013-01-31 11:50:15
您的代码在一个环境中运行,其中包括操作系统的状态、磁盘、网络、时间、内存、启动的其他进程等。
在相同的环境中执行相同的代码,每次都会得到相同的结果。
现在,你得到了不同的结果(执行时间)。如果您重复运行相同的可执行文件,那么周围环境中的某些东西正在发生变化。
现在,最明显的问题是:您的代码是否会引起对外部环境的更改?一个简单的例子是:它读入一个文件,更改数据,然后将其写回同一个文件。
你知道你的密码。只需使用此方法来隔离您的代码可能对其环境产生的任何影响,您就会找到原因。
https://stackoverflow.com/questions/14617645
复制相似问题