程序员自我修养学习笔记

分页

在这里插入图片描述

线程

在这里插入图片描述

处于运行中线程拥有一段可以执行的时间,这段时间称为时间片(Time Slice),当时间片用尽的时候,该进程将进入就
绪状态。如果在时间片用尽之前进程就开始等待某事件,那么它将进入等待状态。每当一个线程离开运行状态时,调度系统就
会选择一个其他的就绪线程继续执行。在一个处于等待状态的线程所等待的事件发生之后,该线程将进入就绪状态。这3个状
态的转移如图1-9所示。
在这里插入图片描述

线程安全

多线程程序处于一个多变的环境当中,可访问的全局变量和堆数据随时都可能被其他的线程改变。因此多线程程序在并发时数据的一致性变得非常重要。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

命令

  1. 预编译

在这里插入图片描述

  1. 编译

在这里插入图片描述

或者

在这里插入图片描述

  1. 汇编

在这里插入图片描述

或者

在这里插入图片描述

目标文件的格式

在这里插入图片描述

在这里插入图片描述

gcc binutils

gcc:特指GCC中的C语言编译器
Binutils工具集
在这里插入图片描述

挖掘SimpleSection.o

  1. 编译生成.o
    在这里插入图片描述

  2. binutils的工具objdump来查看object内部的结构
    在这里插入图片描述

  3. size 命令
    在这里插入图片描述

代码段

在这里插入图片描述

数据段

在这里插入图片描述

BSS段

在这里插入图片描述

符号表

在这里插入图片描述

在这里插入图片描述

其他段

.rodata1 – Read only Data,这种段里存放的是只读数据,比如字符串常量、全局 const 变量。跟".rodata"一样

.comment – 存放的是编译器版本信息,比如字符串:“GCC: (GNU) 4.2.0”

.debug – 调试信息

.dynamic – 动态链接信息

.hash – 符号hash表

.line – 调试时的行号表,即源代码行号与编译后指令的对应表

.note – 额外的编译器信息。比如程序的公司名、发布版本号等

.strtab – String Table.字符串表,用于存储ELF文件中用到的各种字符串

.symtab – Symbol Table.符号表

.shstrtab – Section String Table.段名表

.plt .got – 动态链接的跳转表和全局入口表

.init .fini – 程序初始化与终结代码段。见"C++全局构造与析构"一节

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

ELF文件结构描述

在这里插入图片描述

文件头

在这里插入图片描述
在这里插入图片描述

段表

在这里插入图片描述

重定位表

在这里插入图片描述

字符串表

在这里插入图片描述

链接的接口——符号

在这里插入图片描述

在这里插入图片描述

特殊符号

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

强符号和弱符号

在这里插入图片描述

在这里插入图片描述

空间与地址分配

在这里插入图片描述

在这里插入图片描述

符号解析和重定位

在这里插入图片描述

重定位表

在这里插入图片描述

静态库

在这里插入图片描述

在这里插入图片描述

可执行文件的装载与进程

在这里插入图片描述

装载的方式

在这里插入图片描述

进程的建立

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

为什么要动态链接

在这里插入图片描述

简单的动态链接例子

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值