作者:muc4093631 | 来源:互联网 | 2022-12-07 15:55
我读过,例如Linux的某些部分是汇编,我猜他们会在汇编中编写,以加快执行速度
但是,现代内核开发人员在需要时实际上直接在汇编中编写,或者他们使用高级语言编写并使用编译器将其转换为汇编,并且他们使用转换后的汇编代码?
哪一个更好?考虑到编译器也有代码优化,是不是将高级转换为汇编更高效?我真的需要在汇编中编写内核的哪些部分?
1> Ped7g..:
我读过,例如Linux的某些部分是汇编,我猜他们会在汇编中编写,以加快执行速度
通常不会,他们在汇编中编写[微小]内核部分,因为C语言不支持某些操作(例如,在x86 CPU上切换到保护模式需要写入C语言不知道的寄存器).
再说一次,C非常适合像内核这样的东西(它是一种"低级"语言,虽然我编程的时间越长,这些类别对我来说就越混乱,此时我相信最高的抽象级别之一编程语言实际上是C++,但很多人不同意我的看法,但是如果需要的话,你可以轻松地在C++中获得相当低的水平),因此大多数东西都可以直接写在其中,它只是非常微小的部分影响目标机器的一些特定事物,必须用asm代码完成.
考虑一下像内存管理器这样的东西......关于它的大多数事情(跟踪免费/分配的页面,不同进程的虚拟内存映射等等)都是普通数据结构中的普通数字,并且可以在C中轻松处理.但是为特定进程设置最终的虚拟内存布局可能需要不同的指令,具体取决于目标机器及其MMU设计,因此可能有一小部分程序集强制执行以C计算的内容.