您可能遇到过这些陈述,C的优化程度更高,或者C的性能优于高级语言,因此,我将讨论这种假设的原因。
首先,让我们列出Java之类的语言而不是C所提供的功能:
- 数组索引绑定检查
- 未初始化的变量值检查
- 检查内存泄漏
- 检查空指针取消引用
- 自动垃圾收集
- 运行时类型检查
- 异常处理
并且还有C中不存在的更多此类功能。
额外的功能需要付出一定的代价,而代价包括降低速度和增加尺寸。
让我们以C和Java的动态分配为例
Java
MyClass obj = new MyClass();
您是否考虑过obj的大小,答案是否定的。原因是它是由语言本身在后台自动处理的,因此您不必为其编写特定的代码。
但是在C的情况下
struct MyStruct *obj = malloc(sizeof(struct MyStruct));
正如您在上面的代码中看到的那样,将引用分配给指针的任务,大小的分配是由程序员明确完成的,最后释放了分配的内存。
Thumb执行环境(ThumbEE)支持数组绑定检查,它的其他功能包括对每个加载和存储指令进行自动空指针检查,这是一个调用处理程序的特殊指令。
另一个原因是C与汇编语言的亲密性,在大多数情况下,其指令直接映射到汇编语言,C距离汇编语言只有一层或两层抽象,而Java距离汇编语言至少有三层抽象。
参考 :
1)为什么这么快又为什么要用其他语言更快或更快速
2)ARM_体系结构#Thumb_Execution_Environment_.28ThumbEE.29
3)Linus Torvalds视图
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。