C语言作为"低级"语言有多"低"?

eco*_*sis 23 c programming-languages low-level

我们经常听说C是一种低级语言,但它有多低?我所知道的最低级别是使用指针的内存管理.我还有更进一步的发现水平吗?"靠近硬件"是什么意思?"靠近硬件"的C怎么样?

Edw*_*uck 24

使用标准术语.高级语言和低级语言.

高级语言旨在方便编写语言的人.

低级语言旨在方便运行该语言的计算机.

C只是汇编语言的一个步骤,汇编语言实际上是机器代码的人工翻译.它不会低于机器代码,但人们不能很好地读取十六进制,因此汇编被认为是最低级的编程语言.

大多数C操作可以转换为少于10个机器指令.有些可以翻译成单个机器指令(取决于许多情况).相比之下,许多高级语言可能需要数十到数千台机器指令来实现特定操作.

语言的"层次"主要是抽象概念.除了在尝试理解您是否必须在一个或另一个中编写更多源代码,或者如果您将需要在一种语言中更多地了解机器的体系结构的上下文中将一种语言与另一种语言进行比较之外,它没有用处.到另一个.

  • Linus 开始使用*“机器代码”/原始指令*进行编码。直到后来他才意识到有一种叫做汇编语言的东西;) (2认同)

Kei*_*thS 5

C只不过是围绕ASM的程序包装器.一个好的C程序员,知道该语言背后的原因,应该能够查看代码片段并写出代码编译成的ASM.这些ASM指令可以1:1转换为二进制机器指令.它几乎比程序集高出一步,因此你可以编写C代码来完成计算机能够执行的任何操作,但是,处于如此低的水平,就你必须具体而言它是相对原始的.例如,内存被视为这样,而不是抽象成像"堆"这样的结构.用OO语言创建一个"新"对象就像这么简单; 等效的C代码将涉及malloc,用于该对象的所有成员的大小之和,以及指向块内每个对象成员的指针.

  • 没有.一个优秀的C程序员知道如何编写好的C代码,并且 - 如果需要 - 编写可移植的C.真的*真的*不需要一个优秀的C程序员在任何给定的汇编语言中都非常好或甚至不错.它需要知识不是C,而是编译器的内部,以猜测它将如何编译任何非常基本的代码片段. (4认同)
  • @ user606723:当然可以.标准中没有任何内容禁止这样做,如果事实上尾部调用优化是优化编译器最早的"优化"之一. (4认同)
  • 如果你坚持ASM的计算部分,是的.C不能做的是ASM的其余部分:设置机器状态(尝试从纯C在X86上加载ESP),配置硬件(设备,中断级别,内存管理)和实际设备I/O,管理任务(上下文切换,中断).所以C级别很低,但Pascal并没有太大的不同.C不是裸金属. (3认同)

bta*_*bta 5

C有时被称为"可移植汇编语言".基本上你可以在汇编中做任何事情,你可以在C中做(通过内置于语言中的功能或通过内联汇编).

  • @eq-如果你能得到这样的指针,你可以用任何有指针的语言来做所有这些,例如Pascal.我曾经在BASIC的TRS80计算机上使用POKE命令执行此操作. (2认同)