![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
程序员自我修养
Erick_Lv
菜鸡互啄
展开
-
编译过程、静态库和动态库
C/C++代码到可执行文件从代码到最终的程序,分为4个步骤,分别是:预编译:编译预处理,比如#define和#ifndef之类的,C++的inline也是在这期间处理的编译:把代码转换成汇编,包括词法分析、语法分析和语义分析等汇编:把汇编语言转换成机器码,输出的是目标文件。比如*.o的文件链接:把目标文件聚合成可执行文件链接:链接本质上是把多个ELF文件,按照符号符号等拼接成执行文...原创 2020-02-23 00:35:36 · 938 阅读 · 0 评论 -
程序员的自我修养笔记3 内存管理
程序的内存布局大多数的操作系统中,都会有一部分空间是程序无法访问的,这是内核空间,专门留给操作系统内核使用的。一个进程的空间中,有4个部分,分别是:栈:维护函数调用的上下文,一般分配在用户空间的最高地址堆:容纳程序动态申请的内存,比如C++的new或者malloc申请的。堆一般位于栈的下方。可执行文件映像:存储着可执行文件在内存里的映像保留区:内存中收到保护而禁止访问的区域的总称...原创 2019-07-10 23:22:22 · 140 阅读 · 0 评论 -
程序员自我修养笔记1
Interface的概念:计算机中,每个层次之间的通信协议(这里的接口区别于Java等编程语言的接口)。内存管理内存的分段管理:基本思路是把一段与程序所需要的内存空间大小的虚拟空间映射到某个地址空间。给出一个示例图:但是分段存在一个效率问题,比如我们的硬盘是100M,此时由10M、80M和30M三个程序,不论怎样分段,都无法完成高效的映射。内存的分页管理:分页的基本思路是把内存的地址...原创 2019-07-05 23:03:21 · 154 阅读 · 0 评论 -
程序员的自我修养笔记 2
编译的基本流程构建:编译和链接合并到一起的过程。整个编译的过程可以分为4个阶段:预处理:主要是处理#符号后面的内容,比如展开宏定义和处理ifndef等;还包括删除掉所有的注释等。还有一个重要的步骤,如果涉及到头文件包含,那么会把包含头文件插入到相应的#include的位置。编译:主要是词法分析、语法分析、语义分析和优化相应的代码产生汇编语言等。汇编:把汇编代码转换成机器码。到这一步的时...原创 2019-07-06 23:43:20 · 142 阅读 · 0 评论