提问人:Destructor 提问时间:7/2/2015 更新时间:7/2/2015 访问量:371
运行时解释器真的是 C 程序执行的一部分吗?
Is runtime interpreter really part of C program execution?
问:
众所周知,C语言是一种编译语言。根据 C 语言维基百科,它说:
它被设计为使用相对简单的编译器进行编译,以提供对内存的低级访问,提供有效映射到机器指令的语言结构,并且需要最少的运行时支持。它还说,通过设计,C提供了有效地映射到典型机器指令的结构,因此它已经在以前用汇编语言编码的应用程序中得到了持久的应用,包括操作系统,以及从超级计算机到嵌入式系统的各种计算机应用软件。
但是当我读到这篇文章时,根据布鲁斯·埃克尔(Bruce Eckel)的《C++ 2中的思考》,它说在第2章中标题为Iostreams:(我省略了一些部分)
最大的绊脚石是用于 变量参数列表函数。这是解析通过的代码 在运行时格式化字符串,并从中获取和解释参数 变量参数列表。这是一个问题,原因有四个。
因为解释发生在运行时,所以有性能 你无法摆脱的开销。这很令人沮丧,因为所有 信息在编译时存在于格式字符串中,但它是 直到运行时才进行评估。但是,如果您可以解析参数 在编译时的格式字符串中,您可以制作 hard 函数 调用可能比运行时快得多 解释器(尽管 printf( ) 系列函数通常 优化得很好)。
此链接还说:
类型更安全:使用 时,被 I/O 的对象类型是 编译器静态已知。相比之下,cstdio 使用“%” 字段以动态地找出类型。
所以在阅读本文之前,我在想解释器不像 C 那样用于编译语言,但是在执行 C 程序期间运行时解释器也可用真的是真的吗?在阅读本文之前我错了吗?与 Iostreams 相比,这种运行时解释真的会产生如此多的开销吗?
答:
什么?
这不是对代码的运行时解释,只是在使用格式化字符串的函数内部。
当然,他们必须遍历格式字符串才能了解参数和所需的格式,这需要时间。
下一个:从文件中读取数据时的无限循环
评论