linux 基础
几个关键命令
man -k k1 | grep k2 | grep 2
查找包含k1,k2,k3的函数
man 3 printf
查找c语言函数pintf的帮助文档,注意1为linux命令,2为系统调用,3为c语言函数
grep -nr XXX /usr/include
查找include目录下的某个宏的值
cheat XXX
查找某个linux命令的使用方法
VIM常用命令
见vimtutor
GCC命令
gcc -S main.c -o main.s
汇编代码
gcc -c main.c -o main.o
二进制代码
gcc -g main.c -o main
gdb调试
gcc main.c -o main
编译
GDB命令
b 设置断点
info b 显示断点信息
r 运行
n 不进入的单步运行
s 进入的单步运行
continue 持续运行到下一个断点
p 查看变量值
quit 退出
bt 显示所有栈
frame 显示当前栈/栈顶
up 上条栈
down 下条栈
disassemble 显示汇编代码
disassemble /m main 将汇编代码同c代码一同打印
查看当前运行汇编指令:
disassembler $pc
display/i $pc
x/i $pc
执行单指令。
ni;
si:
静态库
gcc -c add.c sub.c mul.c div.c
ar rcvs libmymath.a add.o sub.o mul.o div.o
gcc main.c -o main -L. -lmymath (or gcc main.c ./libmymath.a -o main)
动态库
gcc -fPIC -c add.c sub.c mul.c div.c
gcc -shared -o libmymath.so add.o sub.o mul.o div.o
gcc -o main main.c -L. -lmymath
libmymath.so 要拷贝到/lib or /usr/lib
Makefile
test(目标文件):所需文件名
tab(一个tab的位置) 命令
示例:
程序的机器级表示
寻址方式:见p113
指令:
数据传送指令:见p114
算数类指令:见p119
访问条件码:见p125
跳转指令:见p128
条件传送指令:见p142
信息的表示和处理
1字=2字节=16位
char 字节 1字节
short 字 2字节
int 双字 4字节
long int 双字 4字节
long long int (不支持) 4字节
char * 双字 4字节
float 单精度 4字节
double 双精度 8字节
long double 扩展精度 10/12字节
处理器体系结构
push %ebp <==> subl $4,%esp
movl %ebp,(%esp)
popl %ebp <==> movl (%esp),%ebp
add $4,%esp
leave <==> movl %ebp,%esp
popl %ebp
存储器层次结构
磁盘容量=字节数/扇区*平均扇区数/磁道*磁道数/表面*表面数/盘片*盘片数/磁盘
T avg rotation=1/2 * T max rotation=1/2 * (60/旋转速率) * 1000
T avg transfer=80/旋转速率 * 1/每条磁道的扇区数 * 1000
T access=T avg seek + T avg rotation + T avg transfer
高速缓存
S=2^s
E
B=2^b
m=logM
M=2^m
s=logS
b=log
t=m-(s+b)
C=B*E*S
”“
gcc main.o add.o sub.o mul.o div.o -o testmymath
main.o: main.c head.h
gcc -c main.c
add.o: add.c head.h
gcc -c add.c
sub.o: sub.c head.h
gcc -c sub.c
mul.o: mul.c head.h
gcc -c mul.c
div.o: div.c head.h
gcc -c div.c