![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
程序员的自我修养
工业张三
这个作者很懒,什么都没留下…
展开
-
《程序员的自我修养》笔记四:可执行文件的装载
背景介绍:可执行文件(程序)只有装载到内存以后才能被 CPU 执行。每个程序运行起来后,都拥有自己独立的虚拟地址空间,为程序运行提供内存地址。程序静态的概念,一些预先编译好的指令和数据集合的文件进程动态的概念,是程序运行时的一个过程进程虚拟地址空间每个程序被运行起来后,都拥有自己独立的虚拟地址空间,大小由硬件平台决定(CPU的位数)Linux操作系统 1 G,用户进程 3...原创 2019-04-28 12:11:37 · 151 阅读 · 0 评论 -
《程序员的自我修养》笔记二:目标文件
目标文件源代码经过编译器编译后生成的文件,是已经编译后的可执行文件格式,只是还没有经过链接,与真正的可执行文件在结构上稍有不同。目标文件在不同的段中保存代码、数据和辅助信息ELF 文件结构文件头包含了描述整个文件的基本属性ELF 文件版本目标机器型号程序入口地址段表的位置、长度和段的数量各个段应用程序可以自定义段,段名以 .作为前缀的是系统保留段.text保...原创 2019-04-25 11:05:38 · 149 阅读 · 0 评论 -
《程序员的自我修养》笔记一:编译和链接
IDE/build(构建)现在的 IDE 将编译和链接的过程合并到了一起预处理『.i』头文件被预编译成 『.i』 文件,经过预编译后的 『.i』 文件不包含任何宏定义,包含的文件被插入到 『.i』 文件中,判断宏定义是否正确或头文件包含是否正确时,可以查看预编译后的文件来确定。将 #define 删除,展开所有宏定义处理所有条件预编译指令处理 #include 预编译指令删除所...原创 2019-04-25 11:00:23 · 174 阅读 · 0 评论 -
《程序员的自我修养》笔记十:系统调用与API
背景系统资源有限,不能被多个应用程序同事访问,所以操作系统将可能产生冲突的系统资源保护起来,阻止应用程序直接访问。程序想访问受保护的系统资源时,使用的由操作系统提供的接口,称为系统调用。系统调用每个系统调用的含义,参数,行为都要有严格清晰的定义稳定和向后兼容操作系统的系统调用从开始定义后就基本不做改变,仅增加新的调用接口,保持向后兼容Windows 的系统调用实际上是 W...原创 2019-04-28 15:48:26 · 180 阅读 · 0 评论 -
《程序员的自我修养》笔记九:运行库
背景main 不是程序开始的第一行代码操作系统装载程序之后,首先运行的不是 main 的第一行,而是某些别的代码,这些代码负责准备好 main 函数执行所需要的环境,负责调用 main 函数,在 main 返回后,记录其返回值,调用 atexit 注册的函数,结束进程。入口函数在 main 之前执行的代码被称为入口函数或入口点,不同平台有不同的名字,入口点是一个程序的初始化和结束部分,常...原创 2019-04-28 15:40:44 · 120 阅读 · 0 评论 -
《程序员的自我修养》笔记八:内存
背景Linux 系统为内核分配 1G 内存,Windows 系统为内核分配 2G 空间,剩余的内存供用户程序使用。用户空间的划分栈用于维护函数调用的上下文,在用户空间的最高地址处分配堆用来容纳应用程序动态分配的内存区域,比栈大很多。常在栈的下方,可执行文件映像存储可执行文件在内存里的映像保留区不是一个单一的内存区域,而是对内存中收到保护而禁止访问的内存区域的总称动态链接库...原创 2019-04-28 15:40:00 · 112 阅读 · 0 评论 -
《程序员的自我修养》笔记七:Windows动态链接
背景DLL 相当于 Linux 下的共享对象。PE 格式的二进制文件。Windows 系统中大量采用 DLL 机制,包括内核、软件更新包、ActiveX 技术等。DLL (Dynamic-Link Library)DLL 即动态链接库的缩写,进程拥有独立的地址空间,当某个 DLL 被加载到地址空间中,所有的程序都可以共享这个 DLL。一个 DLL 在不同的进程中拥用不同的私有数据副本。...原创 2019-04-28 12:15:01 · 149 阅读 · 0 评论 -
《程序员的自我修养》笔记六:Linux共享库
背景由于动态链接的诸多优点,大量的程序使用动态链接机制,系统里有着庞大数量的共享对象,为了维护和成绩,操作系统的共享库通过一定的规则来组织和使用共享对象。共享库兼容共享库的开发者会不停的更新共享库的版本,各个版本之间存在兼容性的问题。共享库版本更新时有两种方式兼容更新所有的更新知识在原有的共享库基础上添加了一些内容,所有原有的接口(ABI)保持不变不兼容更新共享库更...原创 2019-04-28 12:13:57 · 154 阅读 · 0 评论 -
《程序员的自我修养》笔记五:动态链接
背景静态链接的缺点浪费内存浪费磁盘空间模块更新困难为解决空间浪费和更新困难的办法是把程序的模块相互分割开来,形成独立的文件,等程序运行时才链接,这就是动态链接。动态链接优点节省内存升级容易便于独立开发和测试可扩展性一个软件制定好程序的接口,其他开发者编写符合要求的动态链接文件,作为该软件的插件。该软件能够动态的载入各种第三方开发的模块(插件),实现该软件的扩展功...原创 2019-04-28 12:12:47 · 182 阅读 · 0 评论 -
《程序员的自我修养》笔记三:静态链接
空间与地址分配链接器如何将多个目标文件的各个段合并到输出文件。地址和空间指的是程序装载后的虚拟地址中的虚拟地址空间分配。按序叠加相似段合并两步链接方法链接前后的程序中所使用的的地址是程序在进程中的虚拟地址第一步 空间域地址分配扫描所有目标文件,获取它们的信息,将所有目标文件的符号表中的定义和引用放到全局符号表中,计算输出文件中各个段合并后的长度与位置,建立映射关系第二步 符号...原创 2019-04-25 11:23:02 · 143 阅读 · 0 评论