gpt4 book ai didi

c - 操作系统 : Compiler Confusion

转载 作者:行者123 更新时间:2023-11-30 19:56:16 26 4
gpt4 key购买 nike

有同学问我,既然操作系统是扩展机或者虚拟机,那么编译器在生成C程序的汇编代码时是否需要知道寄存器的数量,或者处理器的指令的数量。

我花了一段时间在互联网上搜索,这就是我的想法......

它不需要知道寄存器的数量,因为作为虚拟机,它在内存中拥有无限的资源。

但是,它确实需要了解处理器的指令才能知道何时能够在特定时间执行特定功能。

我想知道是否有人可以帮我澄清这一点,因为我对自己的答案不太有信心。

最佳答案

实际上,编译器不仅针对目标 object code 进行编译(通常通过某些汇编程序文件编译为 processor ) (特别是 instruction set 架构 - ISA),但对于目标 application binary interface - ABI,定义了一些关于 register约定用法(以及如何制作 system calls )和 calling conventions .

操作系统(由 kernel 提供)是(或赋予应用程序和进程)非常接近处理器的虚拟机; VM 是(用户模式,非特权)机器指令 + 切换到内核的指令 ( SYSENTER ) 或 supervisor mode用于系统调用。

另请参阅this & that 。关于compilers ,阅读 register allocation , instruction scheduling , optimizing compilers .

如果您有GCC在您的计算机上,尝试使用 gcc -fverbose-asm -O -S hello.c 编译一个 hello-world 程序(可能在一个新目录中)然后查看生成的汇编代码 hello.s ;添加-fdump-tree-gimple并查看其他编译器转储文件(甚至更多带有 -fdump-tree-all 的文件)

PS。一些编译器编译为内存中的机器代码(例如 SBCL )。另请阅读 JIT compilers 。其他编译器 compileC code .

关于c - 操作系统 : Compiler Confusion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35184089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com