我最近一周花时间将一个递归Branch&Cut算法从Matlab转换到C++,希望能显著减少解决方案所需的时间,但令人难以置信的是,恰恰相反。
我并不是C++的专家,因此我下载了Sleepy Profiler并试图找到潜在的瓶颈。我想问一下,我从这个结果中得出的结论是否正确,或者我正在完全错误的方向上寻找。
代码运行了137秒,以下是Profiler显示的内容(还有其他很多条目,但不重要):
所以如果我理解正确的话,98秒用于创建新对象,34秒用于释放内存(即删除对象)。
我会检查我的代码并看看我能否做得更好,但我也想问一下,你有没有关于常见错误或产生这种行为的坏习惯的提示。我想到的一件事是,在我的代码中使用了许多临时std::vectors来计算一些东西,所以可能会很慢。
为了避免你变瞎,我不会在我自己检查之前发布我的代码,但如果我自己无法解决这个问题,我会回来的。
代码运行了137秒,以下是Profiler显示的内容(还有其他很多条目,但不重要):
所以如果我理解正确的话,98秒用于创建新对象,34秒用于释放内存(即删除对象)。
我会检查我的代码并看看我能否做得更好,但我也想问一下,你有没有关于常见错误或产生这种行为的坏习惯的提示。我想到的一件事是,在我的代码中使用了许多临时std::vectors来计算一些东西,所以可能会很慢。
为了避免你变瞎,我不会在我自己检查之前发布我的代码,但如果我自己无法解决这个问题,我会回来的。
void function(vector a)
,通过引用传递:void function(vector &a)
,或者通过指针传递:void function(vector *a)
或void function(shared_ptr<vector> a)
? - us2012