我知道在编译源代码(例如C ++)时,编译器的输出是机器代码(可执行),我认为这是直接向CPU发出的指令。最近,我正在阅读内核,发现程序无法直接访问硬件,而必须通过内核。
因此,当我们编译一些简单的源代码(例如仅使用一个printf()
函数)并且编译产生可执行的机器代码时,该机器代码中的每条指令将直接从内存中执行(一旦代码由OS加载到内存中)或机器代码中的每个命令仍然需要通过操作系统(内核)才能执行?
我读过类似的问题。它没有说明编译后生成的机器代码是直接向CPU发出的指令,还是需要再次通过内核来为CPU创建正确的指令。即,将机器代码加载到内存后会发生什么?它会通过内核还是直接与处理器对话?
printf
不是一个很好的例子。C规范将其明确定义为仅在“托管”实现中可用的函数(意味着在内核上运行,而不是“独立”(可能不需要一个))。在大多数平台上,printf
这只是您提供的功能libc
,可以代表您做很多事情(最终包括一个系统调用以打印到stdout)。实际上,它与调用libvlc_media_list_add_media
或没有什么不同PyObject_GetAttr
,除了printf
可以保证某些实现可链接而不添加额外的非标准-l
s。