网上好像流传着一句话:C语言程序比其他语言写的程序运行速度快很多,因为它“更接近底层机器”。这个说法是真的吗?如果为真,是什么阻止了用其他语言编写的程序和C语言程序一样快?C语言程序之所以快,是因为它简单。编程语言实际上是程序员与机器交流的“外语”。可以认为,编程语言是为程序员和机器服务的。.事实上,在设计一门编程语言时,往往需要在一些问题上做出取舍,以找到一个平衡点,而平衡点的两端就是程序员和机器。人和计算机有着截然不同的思维方式,所以如果某种编程语言偏向于程序员,程序员写程序可能很方便,但得到的程序对机器不够友好,效率就会损失。比如Python、JavaScript等脚本语言。相反,如果某种编程语言偏向于机器,最终程序的效率会大大提高,但这样的编程语言可能对程序员并不友好,开发效率会降低。这类编程语言以C语言和汇编语言为代表。C语言诞生的时候,计算机技术还不是很发达,这可能是影响“天平”平衡的重要因素。如今,一些新兴的编程语言通常更加“照顾”程序员,“垃圾收集”和“动态类型”等机制几乎成为标准配置。原因也很简单,因为在当今快节奏(快到“浮躁”)的社会,开发效率低下的编程语言无法得到广泛的开发。如上所述,当编程语言的“天平”向程序员倾斜时,最终程序的效率自然会下降。因为编程语言“照顾”程序员是要付出代价的——“垃圾收集”等机制本身也会消耗相当一部分计算机性能。当今的计算机技术虽然有了很大的发展,但是计算机的计算能力始终是有限的。C语言没有这些额外的机制,自然最终的C语言程序会比其他语言程序运行得更快。当然,这也意味着C语言程序员需要自己管理分配的内存,避免内存溢出和泄漏等问题,自己处理变量的类型。再说说C语言的设计者,在设计C语言的时候,他们更关心的是最终C程序的效率。所以像下面这样的几个安全检查必须靠程序员自己,C语言本身是不会检查的。:ArrayindexboundaryUninitializedvariablevaluememoryleaksnullpointerreference以数组的应用为例,Java编程语言会在虚拟机中进行一些方法调用、绑定检查等安全检查。这是语言本身提供的一项服务,这些检查隐藏在引擎盖下,对开发应用程序的程序员来说是不可见的。但是这样的安全检查对于程序员来说无疑是友好的,因为它增加了应用程序的安全性。在C语言程序的开发中,即使是一些非常琐碎的事情,也要由程序员自己去处理。例如,在执行memcpy()等内存操作时,不会检查要复制的内存区域是否重叠。C语言的这些特性被一些程序员视为缺陷,但其他人则将其视为一种灵活性,可以让程序员拥有更大的权限来管理机器并从计算机中获得每一点性能。尽管C语言自称是一种支持可移植程序开发的编程语言,并且它的一些语法也试图实现这一目标,但C语言并不想强迫程序员以可移植的方式编写代码,以防止C语言成为一种“高级编程语言”。汇编语言”,编写特定于机器的代码毕竟是C的强项之一。作为一种古老的编程语言,C语言从未失去它的流行度。自然地,C语言近年来也得到了很大的发展和扩展,从C89到C90,再到C99和C11标准。但是C语言从来没有背离过它的基本精神:信任程序员,尽量把控制权交给程序员。有时负数组下标也允许arr[-1]。保持你的语言简洁。只提供一种操作方法。保持C语言程序的高效率,即使它可能与可移植性不一致。最后一句需要一点解释:生成高效的程序是C语言最重要的优势之一,为了保证看似很简单的操作不会导致崩溃,C语言有时更愿意在通用的ab上做出让步抽取规则,这就是为什么C语言标准中有很多“未定义”的规则。例如,C语言标准并没有明确定义shortint、int、longint整数类型占用多少内存空间,这意味着这些整数类型占用的内存空间在不同的机器上可能是不同的。再比如,C语言标准虽然规定char类型占用一个字节的内存空间,但是它的符号并没有定义,也就是说char类型在一些机器上是有符号的,而在另一些机器上可能是无符号的。C语言的缺点上面已经讨论过,C语言的“天平”更偏向于机器,这就大大增加了C语言程序员的工作量。甚至有Java程序员说:“C语言程序员开发的一个程序,一个月运行起来需要0.05秒,而我开发这样的程序只需要一天,运行起来只需要0.1秒,C语言也是如此吗?”语速快?”?虽然有点夸张,但这样的问题确实应该考虑一下。一般来说,C语言程序本身确实比其他编程语言程序要快,但有些项目不需要这么快,它们的deadline要求更严格。这时候,C语言可能就不那么适合了。所以,C语言程序的效率确实高,但是是以牺牲程序员的开发效率为代价的。这实际上决定了它与其他编程语言的应用领域。如果追求资源消耗和效率的极致,那么C语言无疑是一个不错的选择。该字段由嵌入字段表示。如果项目更注重开发效率,那么C语言显然不是合适的人选。
