程序员的自我修养(十四)--入口函数和运行库

入口函数和程序初始化

入口函数/入口点
程序的入口点实际上是一个程序的初始化和结束部分,它往往是运行库的一部分。
一个典型的程序运行步骤大概如下:

  • 操作系统在创建进程之后,把控制权交给程序的入口,这个入口往往是运行库中某个入口函数
  • 入口函数堆运行库和程序运行环境进行初始化,包括堆、I/O、线程、全局变量构造等等
  • 入口函数在完成初始化之后,调用main函数,正式开始执行程序主体部分
GLIBC入口函数

glibc的程序入口为_start,它由汇编实现,并且和平台相关。
它里面有:
init
unint
rtld_fini //这里是和动态加载有关的收尾工作

MSVC CRT 入口函数

默认入口函数名为:mainCRTStartup。它的大概流程是:

  1. 初始化和OS版本有关的全局变量
  2. 初始化堆==》这里会调用HeapCrete创建默认堆
  3. 初始化I/O
  4. 获取命令行参数和环境变量
  5. 初始化C库的一些程序
  6. 调用main并记录返回值
  7. 检查错误并将main的返回值返回
    在这里插入图片描述
I/O
  • 输入和输出
  • 对于操作系统来说,它代表了计算机与外界的交互
  • 对于程序来说,它代表了程序与外界的交互,包括文件、管道、网络、命令行、信号等。
C/C++运行库

一个C语言运行库大致包括:

  • 启动与退出 ==》 包括入口函数及入口函数所依赖的其他函数
  • 标准函数 ==》 由C语言标准规定的C语言标准库所拥有的函数实现
  • I/O ==》 I/O功能的封装和实现
  • 堆 ==》 堆的封装和实现
  • 语言实现 ==》 语言中的一些特殊功能的实现
  • 调试 ==》 实现调试功能的代码

C语言标准库

  • 标准输入输出 stdio.h
  • 文件操作 stdio.h
  • 字符操作 ctype.h
  • 字符串操作 string.h
  • 数学函数 math.h
  • 资源管理 stdlib.h
  • 格式转换 stdlib.h
  • 时间/日期 time.h
  • 断言 assert.h
  • 各种类型上的常数 limits.h float.h
  • 变长参数 stdarg.h
  • 非局部跳转 setjmp.h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值