为什么嵌入式平台开发人员不断尝试从他们的SDK中移除C++异常的使用?
例如,Bada SDK针对异常使用提供了以下解决方法,看起来异常丑陋:
例如,Bada SDK针对异常使用提供了以下解决方法,看起来异常丑陋:
result
MyApp::InitTimer()
{
result r = E_SUCCESS;
_pTimer = new Timer;
r = _pTimer->Construct(*this);
if (IsFailed(r))
{
goto CATCH;
}
_pTimer->Start(1000);
if (IsFailed(r))
{
goto CATCH;
}
return r;
CATCH:
return r;
}
这种行为的原因是什么?
据我所知,ARM
编译器完全支持C++异常
,这应该不是问题所在。还有其他原因吗?在ARM
平台上使用异常和展开的开销真的很大吗,需要花费很多时间来进行这样的变通吗?
也许还有我没有意识到的其他原因?
谢谢。
setjmp()
和longjmp()
更加受控。每个对象通常都会被输入到异常表中,而在每个文件编译中查找表是非最优的。如果它坐落在磁盘上,通常不会有问题。嵌入式应用程序通常没有磁盘。即使在今天(2013年),g ++
的开发人员仍在尝试优化这些表。在某些情况下,它们可能与代码一样大! - artless noise