CRT(C Runtime Library)—— C/C++运行时库

时间:2023-12-12 15:27:02

C runtime library(part of the C standard library)

任何一个 C 程序,它的背后都有一套庞大的代码来进行支撑,使得该程序得以运行在更高级别上,而不必担心同计算机底层操作的细节,这套代码至少包括:

  • 入口函数(Linux,_start)
  • 入口函数所依赖的函数构成的函数集合(平台系统相关);
  • 各种标准库函数的实现;

这样的一套代码即称为运行时库(Runtime Library),C 语言的运行库,即被称为 C 运行库(C Runtime library,CRT)。一般来说,CRT 函数就是标准的 C 语言函数。例如,printf、scanf、strlen、fopen 等函数就属于 CRT 函数。

linux、windows 的 CRT 源码:

  • visual studio,windows 下的 C/C++ IDE,在 VC\crt\src 里便可找到一份 C 语言运行库的源代码。
  • linux,libc

0. CRT 的基本构成

  • 启动与退出:包括入口函数及入口函数所依赖的其他函数;
  • 标准函数:由 C 语言标准规定的 C 语言标准库所应当具备的函数实现;
  • I/O:I/O 功能的封装与实现
  • 堆:堆的封装与实现
  • 语言实现:

1. windows 下的 CRT 函数

在 windows 下所有的 CRT 函数最终都是转化成为 win32 API 来执行的。

windows 本身并没有在内核之上提供对 CRT 的支持。 CRT 既可以通过静态连接来实现,也可以通过动态链接来实现(MSVCRT.DLL)。常用的安全 CRT 函数常用的安全 CRT 函数安全 CRT(C Runtime Library = C 运行时间库)函数,是微软公司对 C/C++ 语言的扩展。

它在原来函数名后添加了“_s”后缀;一般返回出错代码;并将原来的函数返回值,作为一个参数,添加到函数输入参数列表的最后;对带缓冲区参数的函数,还添加了表示缓冲区大小的输入参数,以防止内存溢出。

warning C4996: ‘fopen’: This function or variable may be unsafe.(_CRT_SECURE_NO_WARNINGS)