编译 链接 装载
Hi Man
这个作者很懒,什么都没留下…
展开
-
编译链接之线程
1. 什么是线程? 线程被称为轻量级的进程,一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成,各个线程之间共享程序的内存空间(包括代码段,数据段,堆)。 线程通常有三种状态 线程都拥有自己的优先级,高优先级的线程会更早的执行。 多线程控制数据并发的方式:锁。具体细分为: 二元信号量 多元信号量 互斥量:与信号量用法类似,唯一的不同是,同一个信号量可以被系统中的一个线程获取...原创 2019-05-26 14:56:32 · 237 阅读 · 0 评论 -
程序员的自我修养之编译和链接
一个程序的源代码到变成可执行程序,要经过 --预处理—编译—汇编–链接四个过程。 1. 预处理都做了啥? 指令: gcc -E hello.c -o hello.i 预处理主要处理源代码中以“#”开头的预编译指令,主要包括: 将所有的“#define”删除并展开所有的宏定义。 处理所有条件预编译指令,比如“#if”"#ifdef""#else"“endif” 处理#include预编译指令...原创 2019-05-26 15:55:28 · 524 阅读 · 0 评论 -
程序员的自我修养之目标文件
1. 什么是目标文件? 目标文件是经过预处理,编译,汇编后生成的文件。 目标文件经过链接后变为可执行文件。 目标文件与可执行文件格式几乎一模一样,linux 中统称为 ELF 文件。 2. 目标文件是什么样的呢? |.text段| 执行语句编译生成的机器代码 | |.data段|已初始化的全局变量和局部静态变量| | .bss |未初始化的全局变量和局部静态变量 | 3. 目标文件这样分段存...原创 2019-05-30 22:51:15 · 186 阅读 · 0 评论 -
程序员的自我修养之静态链接
静态链接一般分两步进行: 第一: 空间和地址分配,这一步做的工作是扫描所有的输入目标文件,将所有的符号表归类到全局符号表中,并合并。 第二:符号解析与重定位,重定位 是 链接过程的核心。 总结为: 合并目标文件—分配虚拟地址 1. 链接过程对C++ 进行了哪些处理? 消除重复代码 引用外部库函数 将全局构造函数及析构函数分别放到 .init 与 。fini 段。 在执行 main函数之前 会首...原创 2019-05-31 07:34:59 · 182 阅读 · 0 评论