gpt4 book ai didi

c++ - "Feature X requires run-time support"是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 20:52:47 25 4
gpt4 key购买 nike

引用 Bjarne Stroustrup 的 C++ 编程语言(第 4 版,第 15 页):

Except for the new, delete, typeid, dynamic_cast, and throw operators, and the try-block, individual C++ expressions and statements need no run-time support. This can be essential for embedded and high-performance applications.

在什么意义上 auto x = new int; 需要运行时支持,而 auto x = 2 + 2; 不需要?天真地,我认为编译器只是简单地将任一示例转换为一些目标代码。是什么让创建 int 对象的目标代码在概念上与执行一些位运算的目标代码如此不同,以至于前者据说“需要运行时支持”?

在同一页面的下方,给出了一些运行时支持示例 (IIUC):

There are, however, good reasons for using C++ in environments that provide significantly more run-time support. Facilities such as dynamic loading, incremental compilation, and a database of type definitions can be put to good use without affecting the language.

如果没有这些功能,哪些语言功能将无法使用?

最佳答案

new int 动态分配内存。这意味着必须有一个地方可以 分配内存。这需要运行时支持。

哦,是的,auto x = 2 + 2; 也分配内存。但那是一个自动变量,而不是一个生命周期由用户明确删除的变量。自动(和静态)变量的存储可能会受到实现的限制,但其中一些是必须存在的。

相比之下,您可以编写一个没有“自由存储”的 C++ 实现,不提供从中分配内存的地方。

还应注意,Stroustrup 主要是在谈论 ::operator new::operator delete。放置 new 不需要运行时支持。


从广义上讲,Stroustrup 所说的“运行时支持”是指需要在运行时有效地调用函数。它不一定实际调用函数,但它正在做一些非常类似于调用函数的事情。

例如,static_cast从基类到派生类只需要一个指针偏移量。偏移值是在编译时静态定义的。在运行时,所发生的只是将一个寄存器添加到一个常量值。

dynamic_casting 需要读取大量运行时数据并遍历编译器生成的数据结构。这实际上是一个函数调用,即使它看起来不像(尽管有点像)。而且它肯定具有一个的性能特征。

抛出/捕获异常是一个复杂的过程,必须与许多元素交互,其中一些元素可能是底层操作环境的一部分。

关于c++ - "Feature X requires run-time support"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44856321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com