《程序员的自我修养》笔记九:运行库

背景

main 不是程序开始的第一行代码

操作系统装载程序之后,首先运行的不是 main 的第一行,而是某些别的代码,这些代码负责准备好 main 函数执行所需要的环境,负责调用 main 函数,在 main 返回后,记录其返回值,调用 atexit 注册的函数,结束进程。


入口函数

在 main 之前执行的代码被称为入口函数或入口点,不同平台有不同的名字,入口点是一个程序的初始化和结束部分,常是运行库的一部分。

C 运行库(CRT),使程序能够正常运行的代码,包括入口函数,依赖的函数,以及标准库函数的实现。运行库是平台相关的,与操作系统结合的非常紧密。glibc 与 MSVC CRT分别是 Linux 和 Windows 下的 CRT.

CRT 包括的功能

  • 入口函数以及入口函数所依赖的其他函数
  • 标准函数(主要),由 C 语言标准规定的 C 语言标准库所拥有的函数实现
  • I/O 功能的封装和实现
  • 堆的封装和实现
  • 语言中的一些特殊功能的实现
  • 实现调试功能的代码

运行库与多线程

早起的 CRT 不支持多线程

改进方法

  • 使用 TLS(线程局部存储)
  • 加锁
    在多线程版本的运行库中,线程不安全的函数内部都会自动的进行加锁。
  • 改进函数调用方式(不合适)
    修改所有的线程不安全的函数的参数列表,改成某种线程安全的版本
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值