Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为什么CRT与内核分离?_Linux_Glibc_Msvcrt - Fatal编程技术网

Linux 为什么CRT与内核分离?

Linux 为什么CRT与内核分离?,linux,glibc,msvcrt,Linux,Glibc,Msvcrt,我们都知道,当一个C程序执行时,在进入main之前,操作系统会在引擎盖下完成许多管道作业,例如分配堆栈、启动一些资源、加载二进制文件等 所以直觉上我认为这些工作是操作系统的一部分。然而,事实是,所有这些工作都是免费的 在一个名为CRT(C运行时库)的重要模块中,如linux中的glibc或Windows中的msvcrt.dll。我想知道它的力量。理解为什么操作系统中存在分离是很重要的。简单地说,它提高了系统的稳定性。C运行时库就是一个利用操作系统服务的库。它随流程一起加载。我们的程序大多是用户模

我们都知道,当一个C程序执行时,在进入main之前,操作系统会在引擎盖下完成许多管道作业,例如分配堆栈、启动一些资源、加载二进制文件等

所以直觉上我认为这些工作是操作系统的一部分。然而,事实是,所有这些工作都是免费的
在一个名为CRT(C运行时库)的重要模块中,如linux中的glibc或Windows中的msvcrt.dll。我想知道它的力量。

理解为什么操作系统中存在分离是很重要的。简单地说,它提高了系统的稳定性。C运行时库就是一个利用操作系统服务的库。它随流程一起加载。我们的程序大多是用户模式程序(与驱动程序和其他操作系统核心服务不同)。资源分配由其他操作系统服务完成,这些库是访问它们的安全方式

无论是C程序、Java程序还是PHP程序,这些例行的进程创建任务都会完成

另外,对于用C以外的语言(甚至C)编写的程序,不必使用C标准库。因此,我们不能将所有这些例行任务放在C标准库中

例如,对于Linux系统, “程序加载器”和不是GNUC库的一部分。它们是单独包装的一部分

尽管链接有点过时,但它将为您提供大量有关编写程序到运行进程的信息。它使用gcc/Linux,但其他平台上的主要任务类似

编辑/* 动态链接器是GLIBC的一部分…多亏了employedrussian
*/

“在Linux系统中,“程序加载器”和“动态链接器”不是gnu c库的一部分”--这与事实完全相反。@EmployedRussian请提供一些证据来支持您的观点动态链接器的代码在这里:glibc仍然需要对底层工作进行系统调用,例如
open
mmap
。微软的CRT则是另一回事。有一段时间,它必须在9x和NT上支持DOS、OS/2和Win32,因此它演变为操作系统的高级包装器。微软甚至在VisualStudio中包含了CRT的源代码。