23 个解决方案
#1
更高的抽象.编译器能力问题
#2
UP
#3
月接近机器硬件的方法就越能更有效地利用机器硬件,越接近人的方法就越能更有效地利用人力资源。C语言则是二者之间的一个平衡点。比汇编语言它要更方便很多,更接近人类思维模式很多;比高级语言则它要快捷很多,更体贴机器很多。
#4
写的烂的汇编语言程序还不如写的好的C语言程序。
#5
书写的语言不规范。假如你写程序以编译器比较容易识别的语法,那么翻译后的汇编语言也非常的高效,否则非常冗余
#6
编译器优化已经做得够好了,很少时候需要写汇编
#7
汇编程序效率的保证同样依赖于程序员的水平
#8
关键是程序员
#9
编程语言越高级,翻译成机器码的步骤就越多,效率就越低
#10
不是因为步骤多少,而是因为无法找到最适合于机器的映射。高级语言里很多东西距离机器太远了。
#11
------------- 编译-------
#12
现在的c/c++编译器编译出来的汇编码非常高效了。
#13
1. 编译器将C语言自动翻译成机器码;编译器再智能、再强大,还是会产生冗余;这些冗余就是造成比汇编慢的主要原因
2. 对于汇编来说,由汇编产生的机器码,几乎没有冗余,因为汇编指令和机器码是严格的一一对应的,这就是汇编比C快的主要原因。
3. 每个语言都有不同的一些特点,关键要看语言本身和机器指令的耦合程度,如果耦合度越高,相对来说效率就越高,这个和语言是否接近硬件本身没有必然的联系。举个例子,C比Fortran更接近硬件,但做科学计算的时候,Fortran在大部分情况下要比C快,俺在学校读书的时候碰到大量的科学计算的时候(比如FFT之类的各种积分变换),同学们都是用Fortran来做的,当然那时候机器本身的性能还不行。不过就算到了今天,C在这方面的性能还是没有超过Fortran(前段时间,在某个杂志上看到了这样说法,我自己没有验证)
2. 对于汇编来说,由汇编产生的机器码,几乎没有冗余,因为汇编指令和机器码是严格的一一对应的,这就是汇编比C快的主要原因。
3. 每个语言都有不同的一些特点,关键要看语言本身和机器指令的耦合程度,如果耦合度越高,相对来说效率就越高,这个和语言是否接近硬件本身没有必然的联系。举个例子,C比Fortran更接近硬件,但做科学计算的时候,Fortran在大部分情况下要比C快,俺在学校读书的时候碰到大量的科学计算的时候(比如FFT之类的各种积分变换),同学们都是用Fortran来做的,当然那时候机器本身的性能还不行。不过就算到了今天,C在这方面的性能还是没有超过Fortran(前段时间,在某个杂志上看到了这样说法,我自己没有验证)
#14
c语言的冗余有哪些呢?
#15
是汇编语言的冗余吧。看看汇编语言繁多的指令吧,是C语言简化了它。
#16
Fortran因为行列排列和C不同,更符合内存排列(循环时需要注意,否则cache会miss)
还有Fortran默认是传地址的,语法规定比C要死,这几个方面更利于编译器的优化
当然注意这几点,C语言按照这个写法效能上也可以超越Fortran,而且C语言有inline形式,Fortran的inline太依赖于编译器的优化,如果Fortran编译器差一些,会在调用上造成很高损耗(现在仅有ivf/gfortran做的很好)。更不用说C可以内建汇编了。只不过C写出高性能计算的东西比Fortran晦涩一些。
反正都和程序员有关。
#17
汇编主要用寄存器进行存储和计算,C主要用内存进行存储和计算。
#18
13楼所说的冗余不是指的指令多少,而是有没有做不必要的事情。汇编语言是直接表达的机器指令,写出的程序可以做到没有任何冗余。而C语言毕竟是进行了抽象,在具体化的过程中无论如何也没法完全避免冗余的出现。
好在C语言抽象的程度不高,所以编译出来的代码还是很高效的。相比之下有些高级语言编译出的代码就有点惨不忍睹了。但那些语言更加接近人类思维模式,在编写程序时的开发效率要比C语言高太多了。
好在C语言抽象的程度不高,所以编译出来的代码还是很高效的。相比之下有些高级语言编译出的代码就有点惨不忍睹了。但那些语言更加接近人类思维模式,在编写程序时的开发效率要比C语言高太多了。
#19
更加低层的汇编
#20
搞得我想好好学一下fortran了,请问windows下学习fortran用什么开发工具?哪里有下载?
#21
fortran只有数值运算快,其它方面并不快。它本来就是被设计来翻译公式的,干这个很专业。
#22
intel 的 fortran 编译器,等一堆东西,很方便的。
#23
越底层的语言越接近硬件,越能更有效的利用机器资源,也就越快。
#1
更高的抽象.编译器能力问题
#2
UP
#3
月接近机器硬件的方法就越能更有效地利用机器硬件,越接近人的方法就越能更有效地利用人力资源。C语言则是二者之间的一个平衡点。比汇编语言它要更方便很多,更接近人类思维模式很多;比高级语言则它要快捷很多,更体贴机器很多。
#4
写的烂的汇编语言程序还不如写的好的C语言程序。
#5
书写的语言不规范。假如你写程序以编译器比较容易识别的语法,那么翻译后的汇编语言也非常的高效,否则非常冗余
#6
编译器优化已经做得够好了,很少时候需要写汇编
#7
汇编程序效率的保证同样依赖于程序员的水平
#8
关键是程序员
#9
编程语言越高级,翻译成机器码的步骤就越多,效率就越低
#10
不是因为步骤多少,而是因为无法找到最适合于机器的映射。高级语言里很多东西距离机器太远了。
#11
------------- 编译-------
#12
现在的c/c++编译器编译出来的汇编码非常高效了。
#13
1. 编译器将C语言自动翻译成机器码;编译器再智能、再强大,还是会产生冗余;这些冗余就是造成比汇编慢的主要原因
2. 对于汇编来说,由汇编产生的机器码,几乎没有冗余,因为汇编指令和机器码是严格的一一对应的,这就是汇编比C快的主要原因。
3. 每个语言都有不同的一些特点,关键要看语言本身和机器指令的耦合程度,如果耦合度越高,相对来说效率就越高,这个和语言是否接近硬件本身没有必然的联系。举个例子,C比Fortran更接近硬件,但做科学计算的时候,Fortran在大部分情况下要比C快,俺在学校读书的时候碰到大量的科学计算的时候(比如FFT之类的各种积分变换),同学们都是用Fortran来做的,当然那时候机器本身的性能还不行。不过就算到了今天,C在这方面的性能还是没有超过Fortran(前段时间,在某个杂志上看到了这样说法,我自己没有验证)
2. 对于汇编来说,由汇编产生的机器码,几乎没有冗余,因为汇编指令和机器码是严格的一一对应的,这就是汇编比C快的主要原因。
3. 每个语言都有不同的一些特点,关键要看语言本身和机器指令的耦合程度,如果耦合度越高,相对来说效率就越高,这个和语言是否接近硬件本身没有必然的联系。举个例子,C比Fortran更接近硬件,但做科学计算的时候,Fortran在大部分情况下要比C快,俺在学校读书的时候碰到大量的科学计算的时候(比如FFT之类的各种积分变换),同学们都是用Fortran来做的,当然那时候机器本身的性能还不行。不过就算到了今天,C在这方面的性能还是没有超过Fortran(前段时间,在某个杂志上看到了这样说法,我自己没有验证)
#14
c语言的冗余有哪些呢?
#15
是汇编语言的冗余吧。看看汇编语言繁多的指令吧,是C语言简化了它。
#16
Fortran因为行列排列和C不同,更符合内存排列(循环时需要注意,否则cache会miss)
还有Fortran默认是传地址的,语法规定比C要死,这几个方面更利于编译器的优化
当然注意这几点,C语言按照这个写法效能上也可以超越Fortran,而且C语言有inline形式,Fortran的inline太依赖于编译器的优化,如果Fortran编译器差一些,会在调用上造成很高损耗(现在仅有ivf/gfortran做的很好)。更不用说C可以内建汇编了。只不过C写出高性能计算的东西比Fortran晦涩一些。
反正都和程序员有关。
#17
汇编主要用寄存器进行存储和计算,C主要用内存进行存储和计算。
#18
13楼所说的冗余不是指的指令多少,而是有没有做不必要的事情。汇编语言是直接表达的机器指令,写出的程序可以做到没有任何冗余。而C语言毕竟是进行了抽象,在具体化的过程中无论如何也没法完全避免冗余的出现。
好在C语言抽象的程度不高,所以编译出来的代码还是很高效的。相比之下有些高级语言编译出的代码就有点惨不忍睹了。但那些语言更加接近人类思维模式,在编写程序时的开发效率要比C语言高太多了。
好在C语言抽象的程度不高,所以编译出来的代码还是很高效的。相比之下有些高级语言编译出的代码就有点惨不忍睹了。但那些语言更加接近人类思维模式,在编写程序时的开发效率要比C语言高太多了。
#19
更加低层的汇编
#20
搞得我想好好学一下fortran了,请问windows下学习fortran用什么开发工具?哪里有下载?
#21
fortran只有数值运算快,其它方面并不快。它本来就是被设计来翻译公式的,干这个很专业。
#22
intel 的 fortran 编译器,等一堆东西,很方便的。
#23
越底层的语言越接近硬件,越能更有效的利用机器资源,也就越快。