程序员的自我修养
文章平均质量分 67
hejl_hpc
高性能计算行业菜鸡与爱好者
展开
-
程序员的自我修养5 共享库的组织
第五章 : linux共享库的组织1. 共享库版本1.1 共享库版本命名libname.so.x.y.zlib是固定前缀name是共享库的名字so是固定后缀x : 主版本号y : 次版本号z : 发布版本号主版本号 : 重大更新,会修改共享库的原有接口,和之前的版本无法兼容,用到该共享库的程序需要重新编译,在可以运行,或者,系统保留旧版本共享库使得依赖旧版本共享库的程序可以依然正常运行次版本号 : 增量更新,不修改共享库的原有接口,在原有接口基础上,添加一些新的接口,和之前原创 2021-09-16 21:57:17 · 237 阅读 · 0 评论 -
程序员的自我修养4.1 动态链接的过程和延迟绑定
1 动态链接的过程注意 : 程序员的自我修养的动态链接部分很多地方不容易理解,我读完之后发现,先从宏观角度,了解整个动态链接的过程,之后再了解动态链接的相关结构,各个段的具体作用反而效果更好,所以,本文先介绍动态链接的过程,其中可能会提到一些段比如.dynamic等等,先把疑问记下,之后的文章会说明的,先了解整体的执行过程为主1.1 进程将控制权交给动态链接器1.2 动态链接器进行自举自举 : 动态链接器实现的功能是将主模块和共享对象链接在一起,链接的过程中对共享对象进行重定位,之后就可以调用共享原创 2021-09-14 22:57:11 · 260 阅读 · 0 评论 -
程序员的自我修养3.4 linux内核装载ELF过程
4.5 linux内核装载ELF过程当我们在linux系统bash下输入一个命令执行ELF程序的时候,过程是怎样的?bash调用fork()系统调用创建一个进程,然后该新进程调用execve()系统调用execve系统调用的入口是sys_execve(),它负责参数的检查复制,完成后调用do_execve()do_execve()读取文件的前128个字节,因为每种可执行文件的前128个字节的数据可以帮助我们知道则个文件是什么格式的,尤其是前4个字节(常常称之为魔数),比如ELF文件头的前四个字原创 2021-09-08 20:23:37 · 233 阅读 · 0 评论 -
程序员的自我修养3.3 进程栈初始化
4.4 进程栈初始化进程运行之前,我们需要准备好系统环境变量和运行参数,最常见的作法是操作系统在进程启动之前将这些信息提前保存到进程的虚拟空间的栈中原创 2021-09-08 20:22:56 · 138 阅读 · 0 评论 -
程序员的自我修养3.2 段地址对齐
4.3段地址对齐我们装载以段为基本单位划分,使得内存的利用率提升了,但是我们总是要一直追求内存的利用率不断提升的,比我们继续分析,假如有三个段,大小分别为127,9899,1988,那么他们分别需要1,3,1个页,一共需要5个页,但是每个页都存在页内碎片,尤其是第一个段,仅仅127的大小,却要给其分配一整个页,三个段大小一共是12014字节,但是却需要20480字节的空间,空间使用率只有58.6%,所以我们继续思考如何提高内存利用率一般大部分unix系统采用的都是相邻页合并的方法,注意 : 我们原创 2021-09-08 20:21:37 · 719 阅读 · 2 评论 -
程序员的自我修养3.1可执行文件的装载过程
可执行文件的装载与进程所谓装载,就是把可执行文件装入内存中执行解决的问题ELF文件在linux下的装载流程可执行文件装载的本质是什么什么是进程的虚拟空间为什么进程要有自己的虚拟空间装载的几种方式虚拟地址空间的分布情况预备知识:进程空间的栈和堆程序在内存分步中,除了之前知道的.data,.text,.bss等段之外,还有两个非常重要的内容,堆和栈栈(stack) : 由编译器自动分配和释放,存放函数的参数值,局部变量的值,其操作方式类似于数据结构中的栈,先进先出的原则堆(h原创 2021-09-08 19:41:04 · 383 阅读 · 3 评论 -
程序员的自我修养2.2 .COMMENT块
COMMNET块之前说过,.bss段存放未初始化的变量,不占据实际的文件大小,但是要分配虚拟地址空间,所以我们依然要知道这些未初始化的变量大小是多少,这个时候就存在一个问题 : 我们之前讲过,全局符号存在强符号和弱符号之分,未初始化的全局符号默认为弱符号,并且强弱符号之间存在一定的规则强符号不允许重复定义如果存在一个强符号和多个弱符号,选择强符号如果有多个弱符号,选择占据空间大的并且要知道,我们的编译后的目标文件会产生各自段,但是编译是针对一个文件的,他可以判断该文件的符号是强符号还是弱符原创 2021-09-07 18:29:32 · 261 阅读 · 0 评论 -
程序员的自我修养2.1 静态链接-两步链接
静态链接本文需要用到的代码#include<stdio.h>int global_init_val = 84; //.dataint global_uninit_val;__attribute__((section("FOO"))) int global = 42;//FOOint main(){ int init_a = 20; int uninit_b; static int static_b = 40;//.data原创 2021-09-07 18:27:39 · 107 阅读 · 0 评论 -
程序员的自我修养1 ELF文件结构
ELF文件结构1. ELF文件头readelf -h hello2.o 可以查看ELF文件头ELF 头:Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 类别: ELF64数据: 2 补码,小端序 (little endian)版本: 1 (current)O原创 2021-09-07 10:25:46 · 215 阅读 · 0 评论 -
程序员的自我修养0
导师给了一个书籍清单,其中<<程序员的自我修养>>这本书旁边写了个必修,想来是非常重要的书籍了,所以,我决定花时间啃完这本书,并且把重要的内容做成笔记,分享到csdn阅读该书需要的前置知识操作系统计算机组成原理linux,我之前有发布过linux文章,把那个文章看完即可c++/c需要提前知道的一些小知识点北桥芯片(North birdge/PCI bridge) : 随着图形化操作系统的普及,游戏是3d游戏和多媒体的发展,慢速的i/o总线以及无法满足图形设备.原创 2021-09-07 18:43:26 · 98 阅读 · 0 评论