学习计时:共4小时
读书:2小时
代码:0小时
作业:0小时
博客:2小时
知识点总结:
一、Linux命令
k 上移 j 下移 h 左移 l 右移
q!退出并丢弃一切改动
x 删除错误字符
i 插入字符(esc返回正常模式)
A 在最后一行添加文本
vim+文件名 编辑文件
wq 保存并退出
删除类:
dw 从光标处删除一个单词
d$ 从光标处删至行尾
de 从当前光标位置删除至单词末尾
动作:
在动作前输入数字可使其重复
dd 删除整行
u 撤销最后执行的命令
U 恢复该行原始状态
ctrl+R 撤销撤销命令。。。
p 粘贴
0 将光标移到行首
r 替换光标所在位置字符
ce 改变至一个单词末尾
执行命令:
搜索 /或?
过滤 !
打开文件:
vim+文件名
或 e+文件路径
i 进入插入模式
w 保存文档
w+文件名 另存为
复制粘贴
普通模式
y复制 p粘贴
剪切粘贴
dd剪切 p粘贴
ddp交换上下行
~转换大小写
字符的替换与撤销(Undo)
快速缩进
普通模式下输入15G
,跳转到15行
普通模式下输入>>
整行将向右缩进(使用,用于格式化代码超爽)
普通模式下输入<<
整行向左回退
普通模式下输入:
进入命令行模式下对shiftwidth
值进行设置可以控制缩进和回退的字符数
shiftwiden命令
可以控制缩进或回退的字符数
调整文本命令
ce 居中
ri 靠右
le 靠左
查找
快速查找
/+要查找的字符串
?向上查找,/向下查找
n 继续查找 N 反向查找
高级查找
\*
寻找游标所在处的单词
\#
同上,但 \*
是向前(上)找,#则是向后(下)找
g\*
同\*
,但部分符合该单词即可
g\#
同\#
,但部分符合该单词即可
多文件编辑
n/N!强制切换:之前文件的输入没有保存,仅仅是切换到另一个文件
打开新文件
e+文件名 打开文件
e#回到前一个文件
ls 列出以前编辑过的文档
b+文件名 直接进入编辑
bd+文件名 删除以前编辑过的文件项目
e!+文件名 打开新文件,放弃正在编辑的文件
f 显示正在编辑的文件名
f+文件名 改变正在编辑的文件名
恢复文件
vim -r+文件名 进入文档
ewcover+文件名 恢复
可视模式
v 选取,再按v,取消选取
shift+v 选取整行
ctrl+v 矩形区域选取
d 删除选取区域
y 复制选取区域
视窗操作
在命令行模式下输入new,打开一个新的视窗
命令行模式下输入:sp 1.txt
打开新的横向视窗来编辑1.txt
命令行模式下输入:vsp 2.txt
打开新的纵向视窗来编辑1.txt
普通模式下Ctrl-w s
将当前窗口分割成两个水平的窗口
普通模式下Ctrl-w v
将当前窗口分割成两个垂直的窗口
普通模式下Ctrl-w q
即 :q 结束分割出来的视窗。如果在新视窗中有输入需要使用强制符!即:q!
普通模式下Ctrl-w o
打开一个视窗并且隐藏之前的所有视窗
普通模式下Ctrl-w j
移至下面视窗
普通模式下Ctrl-w k
移至上面视窗
普通模式下Ctrl-w h
移至左边视窗
普通模式下Ctrl-w l
移至右边视窗
普通模式下Ctrl-w J
将当前视窗移至下面
普通模式下Ctrl-w K
将当前视窗移至上面
普通模式下Ctrl-w H
将当前视窗移至左边
普通模式下Ctrl-w L
将当前视窗移至右边
普通模式下Ctrl-w -
减小视窗的高度
普通模式下Ctrl-w +
增加视窗的高度
文档加密
创建加密文档
vim -x+文档名
输入密码,确认密码
在命令行模式中输入!可执行外部的shell命令
!ls
用于显示当前目录的内容
!rm+文件名
用于删除该文件
w+文件名
可将当前 VIM 中正在编辑的文件另存为该文件
帮助系统
F1 打开帮助界面
h+文件名 打开该帮助文件
ver 显示版本及参数
功能设定
可以在编辑文件时进行功能设定,退出后不会保存
要永久保存需修改vim配置文件
获取目前的设定
set 显示所修改过的配置
set all显示所有设定值
set option?显示option设定值
set nooption取消当期设定值
set功能说明
命令行模式下
set autoindent(ai)
设置自动缩进
set autowrite(aw)
设置自动存档,默认未打开
set background=dark
或light
,设置背景风格
set backup(bk)
设置自动备份,默认未打开
set cindent(cin)
设置C语言风格缩进
二、信息的表示处理
三种重要的数字表示:无符号编码,补码编码(有符号),浮点数编码
当结果太大不能表示时会溢出,大量安全漏洞都是由于算数运算引发的
信息存储
最小的可寻址存储器单位:字节
虚拟存储器:每个字节都由唯一的数字标识,称为地址
虚拟地址空间:所有可能地址的集合
每个程序对象可视为字节块,程序本身是一个字节序列
十六进制表示法
0x...
当x是2的非负整数二次幂时,将n写作i+4j的形式,j表示0的个数
i=0 :1 i=1 :2 i=2 :4 i=3 :8
字
字长:指明整数和指针数据的标称大小
字长为w,虚拟地址范围:0~2的w次方-1,最多访问2的w次方个字节
大多数计算机字长为32位,实验楼为64位
gcc -m32 可以在64位机上生成32位的代码
虚拟存储器:每个字节都由唯一的数字标识,称为地址
虚拟地址空间:所有可能地址的集合
每个程序对象可视为字节块,程序本身是一个字节序列
数据大小
两种不同的浮点数格式:单精度 双精度
格式:4字节 8字节
寻址和字节顺序
小端法:最低有效字节在最前面,高对高,低对低
大端法:最高有效字节在最前面,相反
反汇编器:确定可执行程序文件所表示的指令序列的工具
C 强制类型转换
sizeof 确定对象使用字节数
不同的操作系统有不同的分配规则,结果相同,指针值却完全不同
字节模式 整型 0x00003039 浮点数 0x4640E400
表示字符串
字符串:以null字符结尾的字符数组
文本数据比二进制数据具有更强的平台独立性
库函数strlen不计算终止的空字符
布尔代数
与 或 非 异或
位向量:表示有限集合
位级运算
确定一个位级运算最好的方法:将十六进制的参数扩展成二进制表示并执行二进制运算,然后再转换回十六进制
常见用法:掩码运算
掩码:位模式,从一个字中选出的位的集合
逻辑运算
0 false 非0 true
如果对第一个参数求值就能确定表达式的结果,那么逻辑运算符就不会对第二个参数求值
移位运算
<< >>
逻辑右移:左端补0
算数右移:左边补最高有效位
对于无符号数据,右移必须是逻辑的
补码编码
最常见的有符号数的计算机表示方式就是补码形式
将字的最高有效位解释为负权
最高有效位:符号位
权重-2的位数次方,是无符号表示中权重的负数
最小值[10...0] 最大值[01...1]
UMax TMin TMax
P42页表
|TMin|=|TMax|+1
UMax=2TMax+1
C语言中的有符号数与无符号数
大多数数字都默认为有符号的
要创建一个无符号常量,要加上后缀U或u
转换的原则是底层的位保持不变
如果一个运算一个有符号一个没符号,会将有符号强制转换为无符号
IEEE浮点表示
标准:V=(-1)的s次方*M*2的E次方
符号:s决定正(0)负(1)
尾数:M是二进制小数
阶码:E的作用是对浮点数加权
情况1:规格化的值:当exp的位模式既不全是0,也不全是1
情况2:非规格化的值:阶码域全0
情况3:特殊值:阶码全1
舍入
找到最接近的匹配值
四种舍入方式
默认方法找到做接近的匹配,其他三种用于计算上界和下界
向偶数舍入(默认):向上舍入,向下舍入
三、程序的机器级表示
程序编码
命令gcc指的是GCC C编译器
-01 使用第一级优化(提高优化级别会使最终程序运行更快,但编译时间可能会变长
第二级优化被认为是较好的选择
机器级代码
两种抽象:指令集体系结构,虚拟地址
汇编代码的特点:用可读性更好的文本格式来表示
可见的处理器状态:程序计数器(PC),整数寄存器文件,条件码寄存器,浮点寄存器
汇编代码不区分有符号或无符号整数,不区分各种类型的指针,不区分指针和整数
程序存储器:程序的可执行机器代码,操作系统需要的一些信息,用来管理过程调用和返回的运行时栈,用户分配的存储器块
操作系统负责管理虚拟地址空间,将虚拟地址翻译成实际处理器存储器中的物理地址
数据格式
16位 字
32位 双字
64位 四字
大多数数据类型都是双字
指针:4字节的双字
单精度 4字节
双精度 8字节
扩展精度 10字节/12字节
字符后缀
数据传送指令三个变种:movb,movw,movl
操作数指令符
大多数指令有一个或多个操作数,指示出执行一个操作中要引用的源数据值,以及放置结果的目标位置
不同操作数的可能性分为3种类型:立即数$,寄存器,存储器
数据传送指令
把许多不同的指令分为指令类
见图P114 图3-4
MOV类中的指令将元操作数的值复制到目的操作数中
MOVS和MOVZ指令将一个较小的源数据复制到一个较大的数据位置,高位用符号位扩展或零扩展进行填充
Pushl指令:把数据压入到栈上
加载有效地址
Leal:从存储器读数据到寄存器
目的操作数必须是一个寄存器
一元操作和二元操作
一元操作有一个操作数
二元操作有两个操作数
两个操作数不能同时是存储器的位置
移位操作
先给出移位量,再给出要移位的数值
左移:SAL.SHL效果一样
右移:SAR算术,SHR逻辑
条件码
单个位的条件码寄存器
常用条件吗:CF,ZF,SF,OF
CF:无符号溢出
ZF:零
SF:负数
OF:有符号溢出
Leal进行地址运算所以不改变条件码
两种只会设置条件码的指令:CMP,SUB
访问条件码
三种方法:
根据条件码的某个组合,将一个字节设置为0或者1
条件跳转到程序的某个其他部分
有条件的传送数据
跳转指令及其编码
跳转指令会导致执行切换到程序中一个全新的位置
目的地通常用一个标号指明
当执行PC有关寻址时,程序计数器的值是跳转指令后面的那条指令的地址,而不是跳转指令本身的地址
栈帧结构
栈:传递过程参数、存储返回信息、保存寄存器用于以后恢复、本地存储
为单个过程分配的那部分栈成为栈帧
寄存器%ebp为帧指针
寄存器%esp为栈指针
四、处理器体系结构
我们看到的计算机系统只限于机器语言程序级
指令被编码为由一个或多个字节序列组成的二进制格式——指令集体系结构(ISA)
设计处理器:基于顺序操作,功能正确,有点不实用,时钟必须足够慢。
创建一个流水线化的处理器,处理冒险或冲突
冒险:一条指令的位置或操作数依赖于其他仍在流水线中的指令
Y86处理器:硬件构造块,结构构造模块
程序员可见的状态
程序员可见状态:每条指令都会读取或修改处理器状态的某些部分
Y86处理器类似于IA32,有8个程序寄存器
每个程序寄存器存储一个字
3个一位的条件码:ZF、SF、OF
存储器:一个很大的字节数组,保存着程序和数据
Y86用虚拟地址引用储存器的位置
虚拟地址会被翻译成物理地址
状态码Stat:程序执行的总体状态,正常or异常
Y86指令
是IA32指令集的一个子集,只包括四字节整数操作
详见P232图4-2
Movl指令:irmovl、rrmovl、mrmovl、rmmovl
第一字母:源 i:立即数 r:寄存器 m:储存器
第二字母:目的 r:寄存器 m:储存器
储存器引用方式:基址和偏移量形式
4个整数操作指令OPl:addl、subl、andl、xorl,只对寄存器数据进行操作
7个跳转指令:jmp、jle、jl、je、jne、jge、jg,根据分支指令的类型和条件码的设置来选择分支
6个条件传送指令:cmovle、cmovl、cmove、cmovne、cmovge、cmovg
Call指令将返回地址入栈,然后跳到目的地址
Pushl:入栈 popl:出栈
Halt指令停止指令的执行
指令编码
每条指令的第一个字节表明指令的类型
高4位:代码 低四位:功能
Rrmovl:无条件传送,功能代码0
寄存器标识符0-7
程序寄存器存在CPU中的一个寄存器文件中
寄存器指示符字节:指示一个或两个寄存器
有些指令需要附加4字节的常数字
Y86异常
程序员可见的状态包括状态码Stat,描述程序执行的总体状态
1 AOK 正常
2 HLT 处理器执行halt指令
3 ADR 遇到非法地址
4 INS 遇到非法指令
处理器会调用一个异常处理程序。
Y86程序
.开头的命令是汇编器命令:调整地址
.pos0:从地址0开始产生代码
初始化栈指针,帧指针
YIS:指令集模拟器
一些Y86指令的详情
Pushl:栈指针减4,并且将一个寄存器值写入存储器中。
处理器的行为不确定
两种约定:1.压入%esp的原始值 2.压入减去4的%esp的值
组合电路和HCL布尔表达式
组合电路
两条限制:
两个或多个逻辑门的输出不能连接在一起,否则可能会使线上的信号矛盾,可能会导致一个不合法的电压或电路故障
这个网必须是无环的。
多路复用器:根据输入控制信号的值
组合逻辑电路与C语言中逻辑表达式的区别:
组合电路:输出会持续的响应输入的变化
C表达式:遇到才求值
C表达式:允许参数是任意整数,0表示FALSE,其他都是TURE
组合电路:只对位0,1进行操作
C表达式可能只被部分求值
字级的组合电路和HCL整数表达式
在HCL中,将所有的字级信号都声明为int,不指定字的大小,每个字都可以声明为有特定的位数
在画字级电路的时候,用中等粗度的线来表示携带字的每个位的线路,用虚线表示布尔信号结果
多路复用函数用情况表达式来描述
选择表达式可以是任意的布尔表达式,可以有任意多的情况
情况表达式能描述带复杂选择标准的,多种输入信号的块。
储存器和时钟
由一个时钟控制
时钟寄存器:存储单个位或字,时钟信号控制寄存器加载输入值
随机访问寄存器:存储多个字,用地址来选择该读或该写哪个字
硬件寄存器,程序寄存器
寄存器文件有两个读口端,一个写口端,允许同时进行多个读或写操作
处理器还包括另一个只读储存器
两个储存器合并为一个具有双端口的储存器:一个用来读指令,另一个用来读或写数据
将处理组织成阶段
取址,译码,执行,访存,写回,更新PC
以一种统一的方式处理所有的跳转指令,它们只在判断是否要选择分支的时候不同
在执行阶段,检查条件码和跳转条件来确定是否要选择分支,产生出一个位信号Cnd
在更新PC阶段,检测这个标志
1:PC设为valC(跳转目标)
2:PC设为valP(下一条指令的地址)
SEQ硬件结构
同各个阶段相关的硬件单元负责执行这些处理
在右边,反馈线路向下,包括要写到寄存器文件的更新值,以及更新的程序计数器值
取址,译码,执行,访存,写回
浅灰色方框表示硬件单元
控制逻辑块是用灰色圆角矩形表示的
线路的名字在白色椭圆中说明
宽度为字长的数据连接用中等粗细的线表示
宽度为字节或更窄的数据连接用细线表示
单个位的连接用虚线来表示
SEQ阶段的实现
Nop指令:除了将PC加1,不进行任何处理
Halt指令:使得处理器状态被设置为HLT,导致处理器停止运行
1、 取指阶段
包括指令存储器硬件单元。以PC作为第一个字节的地址,这个单元一次从存储器读出6个字节,第一个字节被解释为指令字节(Split)
Icode:控制逻辑块计算指令
Ifun:功能码
当指令地址不合法,这些值对应于nop指令
2.译码和写回阶段
寄存器文件有四个端口
支持同时进行两个读或两个写
每个端口都有一个地址连接和一个数据连接
地址连接是一个寄存器ID,数据连接是一组32根线路
3.执行阶段
执行阶段包括算术\逻辑单元(ALU),对输入数据执行一系列运算
4.访存阶段
读或者写程序数据
两个控制块产生存储器地址和存储器输入数据的值
另外两个块产生控制信号表明应该执行读操作还是写操作
当执行读操作时,数据存储器产生值valM
5.更新PC阶段
会产生程序计数器的新值
五、存储器层次结构
随机访问存储器
分为静态和动态
SRAM将每个位存储在一个双稳态的存储器单元里。
它可以无限期地保持在两个不同的电压配置或状态之一
亚稳态
2.动态RAM
DRAM将每个位存储为对一个电容的充电。
每个单元由一个电容和一个访问晶体管组成
只要有供电,SRAM就会保持不变。DRAM需要刷新
3.传统的DRAM
分为d个超单元,每个超单元由w个DRAM单元组成,一个d*w单元共存储dw位信息
超单元被组织成r行c列的长方形阵列,rc=d
每个超单元有形如(i,j)的地址,i表示行,j表示列
每个DRAM芯片被连接到某个称为存储控制器的电路
4.存储器模块
DRAM芯片包装在存储器模块中,插在主板的扩展槽上
常见:双列直插存储器模块,单列直插存储器模块
通过将多个存储器模块连接到存储控制器,能够聚合主存
5.增强的DRAM
快页模式DRAM(FPM DRAM)
扩展数据输出DRAM(EDO DRAM)
同步DRAM(SDRAM)
双倍数据速率同步DRAM(DDR DRAM)
Rambus DRAM(RDRAM)
视频RAM(VRAM)
6.非易失性存储器
DRAM和SRAM断电后会丢失信息,是易失的,非易失性存储器断电后依然保存着信息
ROM:只读存储器
PROM(可编程ROM):只能被编程一次
可擦写可编程ROM(EPROM):能够被擦除和重编程的次数的数量级可达1000次
闪存:基于闪存的磁盘驱动器——固态硬盘
存储在ROM中的程序通常称为固件。
7.访问主存
数据流通过总线传播
总线事务:读事务:从主存传送数据到CPU 写事务:从CPU传送数据到主存
总线是一组并行的导线,能携带地址、数据和控制信号
系统总线:连接CPU和I/O桥
存储器总线:连接I/O桥和主存
读事务和写事务都有三个基本步骤
磁盘存储
磁盘构造
由盘片构成,每个盘片有两个表面,表面覆盖着磁性记录材料
盘片中央有一个可以旋转的主轴,使盘片以固定的旋转速率旋转,通常5400~15000转每分钟
每个表面都由一个称为磁道的同心圆组成,每个磁道被划分为一组扇区,每个扇区包括相等数量的数据位,扇区之间由一些间隙分隔开
整个装置通常称为磁盘驱动器
磁盘容量
一个磁盘可以记录的最大位数称为它的最大容量
记录密度:磁盘一英寸的段中可以放入的位数
磁道密度:从盘片中心出发半径上一英寸的段内可以有的磁道数
面密度:记录密度和磁道密度的乘积
磁盘容量=字节数/扇区*平均扇区数/磁道*磁道数/表面*表面数/盘片*盘片数/磁盘
磁盘操作
磁盘用读/写头来读写存储在磁性表面的位,而读写头连接到一个传动臂的一端。
寻道:通过沿着半径轴前后移动这个传动臂,驱动器可以将读/写头定位在盘面上的任何磁道上
对扇区的访问时间三部分:
寻道时间:移动传动臂所需的时间称为寻道时间
旋转时间:Tmax=1/RPM*60secs/1min,平均旋转时间是它的一半
传送时间:一个扇区的传送时间依赖于旋转速度和每条磁道的扇区数目
逻辑磁盘块
逻辑盘控制器:维护着逻辑块号和实际磁盘扇区之间的映射关系
控制器上的固件执行一个快速表查找,将一个逻辑块号翻译成一个(盘面,磁道,扇区)三元组,唯一的标识了对应的物理扇区
连接到I/O设备
输入/输出(I/O设备),通过I/O总线连接到CPU和主存
I/O总线比系统总线和存储器慢,但可以容纳种类繁多的第三方I/O设备
通用串行总线控制器:连接到USB总线的设备的中转机构
图形卡(适配器):包含硬件和软件逻辑,代表CPU在显示器上画像素
主机总线适配器:将一个或多个磁盘连接到I/O总线,使用主机总线接口定义的通信协议
访问磁盘
CPU使用一种称为储存器映射I/O的技术来向I/O设备发出命令
地址空间中有一块地址是为与I/O设备通信保留的
每个这样的地址称为I/O端口
CPU通过执行三个存储指令,发起磁盘读
第一条指令:发送一个命令字,告诉磁盘发起一个读,同时还发送了其他的参数
第二条指令:指明应该读得逻辑块号
第三条指令:指明应该存储磁盘扇区内容的主存地址
商用磁盘的剖析
第一列给出区号,区0在最外面,区14在最里面
第二列给出该区每条磁道中包含的扇区数
第三列显示分配给区的柱面数量
第四列给出了分配给每个区的逻辑块总数
靠外面的区比靠里面的区有更多的扇区
固态硬盘
固态硬盘(SSD)是一种基于闪存的存储技术
一个SSD包由一个或多个闪存芯片和删除翻译层组成
比起旋转磁盘,SSD有很多优点:
由半导体存储器构成,没有移动部件,因而随机访问时间比旋转磁盘要快,能耗更低,也更结实
缺点:容易磨损,贵
局部性
局部性原理:倾向于引用邻近于其他最近引用过的数据项的数据项
两种形式:时间局部性,空间局部性
一般而言,有良好局部性的程序比局部性差的程序运行得更快
顺序访问一个向量每个元素的函数,具有步长为1的引用模式。
在一个连续向量,每隔k个元素进行访问,就被称为步长为k的引用模式
随着步长的增加,空间局部性下降
双重嵌套循环按照行优先顺序读数组的元素
重复引用同一个变量的程序有良好的时间局部性
对于具有步长为k的引用模式的程序,步长越小,空间局部性越好。具有步长为1的引用模式的程序有很好的空间局部性。在存储器中以大步长跳来跳去的程序空间局部性会很差
对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好
存储器层次结构
存储技术:不同存储技术的访问时间差异很大。速度较快的技术每字节的成本要比速度较慢的技术高,而且容量较小。CPU和主存之间的速度差距在增大
中心思想:对于每个k,位于k层的更快更小的存储设备作为位于k+1层的更大更慢的存储设备的缓存
块:连续的数据对象片
缓存命中
当程序需要第k+1层的某个数据对象d时,它首先在当前存储在第k块
第k层没有缓存数据对象d
如果缓存不命中,第k层的缓存从第k+1层缓存中取出包含d的那个块,如果第k层的缓存已经满了的话,可能会覆盖现存的一个块,这个过程称为替换或驱逐,被驱逐的块称为牺牲块,决定该替换哪个块是由缓存的替换策略来控制的
一个空的缓存有时称为冷缓存,此类不命中称为强制性不命中或冷不命中
冲突不命中:数据对象映射到同一个缓存块
容量不命中:工作集大小超过缓存大小
高速缓存存储器
存储器地址m位,S=2的s次方个高速缓存组,每个组包含E个高速缓存行,每个行由B=2的b次方字节的数据块组成
一个有效位指明这个行是否包含有意义的信息,还有t=m-(b+s)个标记位
描述:元组(S,E,B,m)
高速缓存的大小C指的是所以块的大小的和,C=S*E*B
(详见p410图6-28)
六、其他
gcc编译器
1.流程:预处理、编译、汇编、链接
(1)预处理 对头文件和宏文件进行处理
-E:查看,让gcc在预处理结束后停止编译
gcc -E hello.c -o hello.i
(2)编译 检查,翻译成汇编语言
-s 查看 gcc -s hello.i -o hello.s
(3)汇编 gcc-c hello.s -o hello.o 转成目标文件
(4)链接 函数库 静态库.a 动态库 .so
gcc默认为动态库 gcc hello.o -o hello
2.分析
(1)常用 -I dir:在头文件的搜索路径列表中添加dir目录,添加放置在其他位置的头文件
gcc hello|.c -I /root/workplace/gcc/ -o hello|
(2)库
静态库:使用归档工具ar将一些目标文件集成在一起
-L dir 在库文件的搜索路径列表中添加dir目录
动态库:-tpic 构造一个目标文件
-shared 生成动态库
注册动态库路径名
gdb调试器
1.使用流程
gcc -g test.c -o test
查看文件 l
设置断点 b+行号
查看断点情况 info b
查看调用函数情况 bt
运行代码 r
查看变量值 p+变量
单步运行 n或s s会进入函数,n不会进入函数
恢复程序运行 c
2.基本命令
help 查找gdb命令
help+命令名
设置断点与恢复命令
函数断点 b+函数名
条件断点 b+行数/函数名+if表达式
修改运行参数相关命令
set 变量=设定值
makefile工程管理器
1.makefile基本结构
makefile是make读入的唯一配置文件
由make工具创建目标体
target:dependency_files
(Tab) command
make target
2.makefile变量
变量定义:
递归展开方式 VAR=var
简单方式:VAR:=var
3.规则:隐含规则,模式规则
我的收获:
学会了Linux命令,vi,gcc,gdb,make的使用
了解了信息表示和处理的方式,程序的计算机表示,处理器体系结构,存储器层次结构
更加深入的理解了计算机系统
读书的速度也变快了,起初读起来很慢很费力,后来越来越快,重点也抓得越来越准,400多页书就这样被看完了
虽然要说兴趣真的兴趣不大这是没办法的事,但是强迫自己学还是可以学懂一些的,对自己的学习能力更加有自信了
我的不足:
我的记忆力越来越差了,学过的东西不一会就忘了,考前一定要再重新看一遍否则什么都不会,有的时候连自己的手机号都记不起来,这该怎么办才好呢??
我钻研的精神也不够,有些地方实在看不懂就不看了,想缓一缓以后再看,然后就忘了
我的数学能力太差了,有一章有好多复杂的公式,我就不知道它在讲什么了
我的电脑有个不足就是虚拟机装不上Linux,可能是我还没有尝试足够多遍吧
课程建议和意见:
既然老师说了接下来的课程的模式和以前不一样了,那我就不提什么意见了,拭目以待