![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
程序员的自我修养
文章平均质量分 82
wuguinianjing
这个作者很懒,什么都没留下…
展开
-
内存管理、内存池
内存池原创 2021-11-28 17:05:10 · 152 阅读 · 0 评论 -
运行时加载动态库
一个程序从源文件编译生成可执行文件的步骤:预编译 --> 编译 --> 汇编 --> 链接(1)预编译,即预处理,主要处理在源代码文件中以“#”开始的预编译指令,如宏展开、处理条件编译指令、处理#include指令等。(2)编译过程就是把预处理完的文件进行一系列词法分析、语法分析、语义分析以及优化后生成相应的汇编代码文件。(3)汇编是将汇编代码转变成二进制文件。(4)链接将二进制文件链接成一个可执行的命令,主要是把分散的数据和代码收集并合成一个单一的可加载并可执行的的文件。原创 2021-11-02 00:36:17 · 1850 阅读 · 0 评论 -
链接----桩打桩
桩打桩代理模式真是无处不在,谁想,运行时动态链接也是,哈哈,当然也是看了腾讯的libco,协程库,再来研究研究其运行时动态链接目标**目标:**截获来自共享库的调用,以及出于某种原因截获它们后做一些事情,我们通常想要做的是截获一个共享库的函数调用,你可以追踪对某个特殊库函数的调用次数,验证和追踪它的输入和输出,或者甚至把它替换成一个完全不同的实现。也许是记录一些统计数据或做一些错误检测,libco协程里的也很有意思,将系统调用截获,然后按照预期调用实际的函数。基本思想给定一个需要打桩的目标函原创 2021-04-18 17:43:40 · 329 阅读 · 0 评论 -
编译的相关环境变量
编译的相关环境变量PS:此处的编译指的是完整的编译链接过程。LD_LIBRARY_PATH改变共享库查找路径最简单的方法就是使用LD_LIBRARY环境变量,这个方法可以临时改变某个应用程序的共享路径查找路径,而不会影响系统中的其他程序。动态库的查找过程/ lib 和/usr/lib是一些很常用的、成熟的,一般系统本身所需要的库;/usr/local/lib是非系统所需的第三方程序的共享库基于Glibc的操作系统,如所有的LINUX系统,动态链接的ELF可执行程序在启动时同时,还好启动原创 2021-04-17 18:03:42 · 221 阅读 · 0 评论 -
链接的相关知识
链接链接的任务链接的两个基本任务符号解析一个程序会定义和引用符号,汇编器(as)会将符号定义存储在目标文件中(形成符号表),每个符号对应一个结构数组,包含了该有关该符号的信息。而符号解析就是在链接器链接过程中,链接器将每个符号引用与一个符号定义相关联(此时,链接器必须决定将其中的某个定义用于所有后续引用),一旦链接器和一个独一无二的的目标建立联系,每个引用都会有一个唯一的符号定义,所以就存在一种情况,多个模块中存在多个符号定义,就有相应的强弱符号规则(如果只有单个模块,编译器当然能确定出来,但原创 2021-04-17 17:29:50 · 567 阅读 · 0 评论 -
C++与C的相互调用
C++调用C语言extern “C”C++调用C,指定部分按照c语言进行编译extern “C” {} 只能由C++编译器来进行解析extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。原创 2021-03-28 16:03:13 · 1037 阅读 · 0 评论 -
第一章 温故而知新
1.2 万变不离其宗(计算机的核心)三个部件最为关键,它们分别是中央处理器CPU、内存和I/O控制芯片总线的演化史(CPU、内存、I/O的频率不同导致)SMP与多核 (SMP对称多处理器)理论上讲,增加CPU的数量就可以提高运算速度,并且理想情况下,速度的提高与CPU 的数量成正比。但实际上并非如此,因为我们的程序并不都能分解成若干个完全不相干的子问题。就比如一个女人可以花10个月生出一个孩子,10个女人并不能在一个月就生出一个孩子一样。当然很多时候多处理器是非常有用的,最常见的情况就是在大原创 2021-01-08 16:46:21 · 140 阅读 · 0 评论