首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >哪个系统软件负责运行时检查?

哪个系统软件负责运行时检查?
EN

Stack Overflow用户
提问于 2016-02-04 18:43:09
回答 4查看 106关注 0票数 2

我认为这听起来是一个简单的问题,但我在阅读C++异常规范时提出了这个问题。也就是说,在其中一本书中,C++11现在有一个关键字‘no以外’,这意味着当函数头声明它时,它不会被抛出异常,并且这个关键字出现的原因是C++ exception specifications are checked at run time rather than at compile time, so they offer no programmer guarantees that all exceptions have been handled.,因此他们得出了两种情况,一个函数会抛出异常,或者如果我们清楚它是否永远不会抛出,那么就使用noexcept进行优化(希望如此)。

void foo() noexcept();

这是主要的问题。哪个系统软件执行这些运行时检查(我希望不是编译器/链接器/加载程序),以及在运行时哪个系统软件负责分配内存(动态内存分配),而编译器和其他软件都没有注意到这一点?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-02-05 05:16:02

实际上,您不会说“标准库”处理这个问题。异常和异常规范是一个核心语言特性,比标准库更基本。

您也可以问,有什么软件可以确保当我在C++中调用函数时,调用方实际上收到了我传入的值?在我的程序运行时,哪个软件处理堆栈帧指针?

从标准的角度来看,我认为“实施”是负责这些细节的。例如,在一些语言中,比如Java,有一个"Java运行时环境“(),它非常清楚地负责这些事情,您可以尝试研究它是如何做到的。在C++中没有通用的运行时环境--就像其他人说的那样,编译器负责生成确保这些事情发生的代码,并且代码最终会分散在结果的可执行文件中。编译器到底是如何完成其任务的是特定于实现的,您不能给出超出标准规定的一般答案,而且通常它会指定预期的行为,而不是隐藏的细节。

当你问

另外,哪个系统软件负责在运行时分配内存(动态内存分配)

这也是一个实现细节,它将因编译器而异。

票数 1
EN

Stack Overflow用户

发布于 2016-02-04 21:17:35

没有主动的“系统软件”检查异常,正如您所说的那样;相反,抛出异常是程序本身所采取的操作。程序将异常传回堆栈,直到异常与异常处理程序匹配为止。

如果没有异常处理程序匹配,则由引导代码捕获异常(main不是典型程序的实际入口点,而是运行时将控制交给程序员的位置),程序终止。

票数 3
EN

Stack Overflow用户

发布于 2016-02-04 18:53:08

这是由C++运行时(例如libstdc++)完成的。在出现异常的情况下,编译器在函数周围添加了一些保护(如果抛出异常,这无论如何都是调用析构函数所必需的),如果函数抛出(或者抛出抛出的规范之外的其他异常),则由C++运行时调用终止(),并关闭应用程序。

内存堆分配也(默认情况下)由C++运行时库完成。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35209091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档