C++ 为什么试块会降低我程序的速度?
我一直在研究C++ 为什么试块会降低我程序的速度?,c++,exception,C++,Exception,我一直在研究\uu try/\uu除了构造是否足够快,是否适合我使用,并遇到了一个奇怪的结果 我惊讶地发现,在\uuu-try块中调用函数的速度是单独调用函数的两倍 为什么会这样 #包括 使用名称空间std; //附加statndart包括 #包括 空函数() { int a=0; 对于(int i=0;i当你问问题时,你的意思可能是你想使用\uuuu try/\uu,除了而不是try/catch \u try/\u是否比try/catch快或慢并不重要,因为, \uuuuu try/\uu除
\uu try
/\uu除了
构造是否足够快,是否适合我使用,并遇到了一个奇怪的结果
我惊讶地发现,在\uuu-try
块中调用函数的速度是单独调用函数的两倍
为什么会这样
#包括
使用名称空间std;
//附加statndart包括
#包括
空函数()
{
int a=0;
对于(int i=0;i当你问问题时,你的意思可能是你想使用\uuuu try
/\uu,除了而不是try
/catch
\u try
/\u是否比try
/catch
快或慢并不重要,因为,
\uuuuu try
/\uu除外
用于捕获而不是捕获一般异常
对于标准C++代码,你应该总是使用<代码>尝试<代码> >代码> catch <代码>,而不是<代码>尝试< <代码> >代码> >除
<>代码>尝试< C++ >代码> catch <代码>,是C++标准处理一般C++异常的标准。您没有给出编译器版本、优化设置,并且使用了各种优化机会的代码。然后您只运行一次函数。不管怎么说,选择计时代码还不够精确。即使我们承认你的代码是一个可靠的基准(不是),我也没有得到任何统计上的显著差异,所以这个问题是没有意义的。4次没有uu try()3510351635683419和uu-try 1782179217391732的问题似乎更复杂。在调试版本中的VS2010上,无论使用哪种定义,每次运行的时间都约为3200ms。在发布版本中,非uu-try版本的时间变为2400ms,而u-try版本的时间变为1200ms。顺便说一句:我将时间改为QueryPerformanceCounter因为它更可靠。OP的框架非常糟糕,但是如果Feruzbek和mkaes列出的时间是准确的,那么这里有一个真正的问题。
#include <iostream>
using namespace std;
//addiitonal statndart includes
#include <windows.h>
void function()
{
int a=0;
for (int i=0;i<1000;i++)
for(int j=0;j<1000000;j++)
{
if(0==i*j % 2)
a++;
else
a--;
}
cout << a<< endl;
}
//you can make 0 for test wihtout try
#define USE_TRY 1
int main()
{
DWORD time = 0;
time =timeGetTime();
#if USE_TRY
__try{
function();
}
__except(1)
{
cout <<" exception handled"<< endl;
}
#else
function();
#endif
time =timeGetTime()-time;
cout<<"time = "<<time<<endl;
}