【发布时间】:2011-10-04 09:49:39
【问题描述】:
为什么嵌入式平台开发人员不断尝试从他们的SDKs 中删除使用C++ exceptions?
例如,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++ exceptions,这实际上不可能。还有什么? ARM 平台上的异常使用和展开的开销是否真的BIG 需要花费大量时间来解决这些问题?
也许还有一些我不知道的事情?
谢谢。
【问题讨论】:
-
+1 将其描述为异常丑陋...
-
一大原因是旧代码。除非代码从一开始就写成异常安全的,否则它不是异常安全的。这是 Google 不使用异常的主要原因之一:一开始没有,现在我们有点坚持这个决定。
-
我建议将“使用”标签(对我来说似乎是无操作)更改为“嵌入”。
-
您的意思是“为什么他们不允许平台中的异常”或“人们为什么不使用异常”?对于前者,禁用异常是确保与使用“嵌入式 C++”子集的平台兼容的途径。 en.wikipedia.org/wiki/Embedded_C%2B%2B
-
查看许多答案here。有一篇专门关于exceptions 的帖子。
setjmp()和longjmp()受到更多控制。每个对象经常被输入到异常表中,并且在每个文件编译中找出表是非最佳的。通常,如果它位于磁盘上,这并不痛苦。嵌入式应用程序通常没有磁盘。即使在今天(2013 年),g++开发人员仍在尝试优化这些表。在某些情况下,它们可能与代码一样大!
标签: c++ exception embedded arm overhead