不知道楼主这里问的runtime是不是runtime lib--运行库。
任何一个C程序,其背后都有一套庞大的代码来支撑,以使得该程序能够正常运行。这套代码至少包括入口函数,及其所依赖的函数所构成的集合。当然,它还应该包括各种标准库函数的实现。
这样一个代码集合称之为运行库--runtime lib。而C语言的运行库,即被称为C运行库(CRT)。
看下面一个简单程序:
#include
#include
int a = 3;
int main(int argc, char* argv[])
{
int* p = (int *)malloc(sizeof(int));
scanf("%d", p);
printf("%d", a + *p);
free(p);
}
从上面代码我们可以看到,在程序刚刚执行到main的时候,全局变量a的初始化过程已经结束,main函数的两个参数(argc, argv)也被正确的传了进来。此外,堆和栈的初始化悄悄的完成,一些系统I/O也被初始化了,因此可以放心地使用printf和malloc。
为什么我们的程序是从main()而不是WinMain(),或者是一个随便的名字--nomain开始呢?其实这和运行库密切相关的。
一个C语言的运行库大致包括如下功能:
1.启动与退出:包括入口函数及入口函数所依赖的其他函数。
2.标准函数:由C语言标准规定的C语言标准库所拥有的函数实现。
3.I/O:I/O功能的封装和实现。
4.堆:堆的封装和实现
运行库是平台相关的,因为它和操作系统结合的非常紧密。C语言运行库从某种程度上来讲是C语言的程序和不同操作系统平台之间的抽象层,它将不同的操作系统API抽象成相同的库函数。比如我们可以再不同的操作系统下使用fread来读取文件,而事实上fread在不同的操作系统下的实现是不同的,但作为运行库的使用者,我们不需要这点。
linux和windows平台下主要的C语言运行库分别有为glibc(GUN C Labrary)和MSVCRT。
参考阅读:《程序员的自我修养--链接,装载与库》第11章