RT
解决方案 »
- 已发布软件背景图片修改?
- 控件接口重复,LINK错误怎么办?
- 关于CTabCtrl,可否在每个tab页上加一个关闭的按钮啊?或者有实现类似功能的其它控件吗?
- COM为IE插件,IE一运行即启动,打包成CAB之后在网上发布,结果只要客户机上已有该插件,IE就会报读内存地址错,怎么回事?怎样才能用CAB
- 大家帮我看一下这小段奇怪的html代码
- 高分请教:如何使用多播发送文件。
- 怎样用vc调用matlab编译器生成的*dll文件?
- 在铺线程中调用主线程中的控件,最好的方法是什么?
- [经典]孙鑫VC++视频教程
- 多线程读写全局变量的奇怪问题
- 子窗口第二次创建后,主窗口界面停止刷新
- 在LISTBOX中为什么显示乱码了
排除编译器的因素,效率跟语言的层次是有关系的,一般来说越低级的语言,效率越高。
C语言其实可以算是具有高级语言特性的汇编,其底层特质让它的效率较高。
C语言能实现汇编语言的大部分功能,可以直接对硬件进行操作。因此 C既具有高级语言的功能,又具有低级语言的许多功能,可用来些系统软件。
生成目标代码质量高,程序执行效率高。一般只比汇编程序生成的目标代码效率低10%~20%。
C++的设计者stroustrup要求C++效率必须至少维持在与C相差5%以内,所以,经过精心设计和实现的C++同样有很高的效率,但并非所有C++程序具有当然的高效率,由于C++的特殊性,一些不好的设计和实现习惯依然会对系统的效率造成较大的影响。同时,也由于有一部分程序员对C++的一些底层实现机制不够了解,就不能从原理上理解如何提高软件系统的效率。
===================================================
对硬件能否直接操作与语言无关吧.
另外,c/c++和其他语言同样需要编译成汇编才能在硬件上执行的,访问地址的事完全可以由编译器来完成,倘若我有一段c/c++的代码没有用到指针和位操作的,请问我用另外一种语言来实现是否得到的效率会一样?(不考虑编码者的水平差异)就是因为有个指针?
========
当然不是。
也在于编译器========================
其他语言同样有编译器,为何C/C++的编译器就胜人一筹?效率高是另一回事,关键在于写的人能否做到高效
================================================
这里讨论当然是不考虑人为的水平差异
而vb生成的exe不是100%的exe,其实是解释运行的;
Java也是,生成的exe都不是对应机器指令,都是对应虚拟机的指令,然后还要虚拟机来解释它;
而.net也是,生成的exe都是一种称为IL(InterMediate Language)的东西。大概就是这样子了,
如果都是生成100%的机器指令,比如Pascal,那么CPP在速度上并无优势可言
请问是否只有C/C++外,其它的语言都不是直接产生100%的? 这也是C/C++的性能能优于其它语言的地方?
据说,C++相对于JAVA来说,优化的不够好,不过我也不是很清楚.
但C比C++要高效是一定的,面向对象的设计使人更易理解,不过也同时浪费了一些效率.
==========
不是啊,比如我上面说的Pascal/Object Pascal。
比如ADA、Cobol……
其他语言就不一定了,比如C#或者Java中,你创建一个对象,看起来简单,其实底层CLR做了无数的工作,效率自然就低了
实际上C++语言基本上不做额外的工作,这给用户带来了极大的灵活性,但也带来了出错的隐患
==========
不是啊,比如我上面说的Pascal/Object Pascal。
===============================================================================
如果Pascal/Object Pascal也能产生本地代码,那么为何C/C++的代码执行次次次效率比它高?
强制类型检查是编译时做的吧?!
Java这么傻?我没有深入看过Java,不知道
=========
这个!二者运行效率应该差不多吧
即使高,也是同一数量级的吧不会像c++ vs c#那样,在密集运算上性能差距达到10:1吧?
ClassA a = new ClassA();
object obj = a; // 能通过
ClassB b = (ClassB)obj; // 编译时能通过,运行时会报异常,