cmu15-213 csapp 总结
csapp的总结(还是一年前学的。。。)
lecture1--4
整数和float。整数主要是补码表示,float就是IEEE标准,这是他们的底层表示。
unsigned与int转换,不改变底层bit,还是那些bit,只是对bit的处理改变。而float与int转换,则是根据原来的值,产生新的bit值。
lecture5--9
这部分主要是汇编指令入门,如果做了相应的lab、听了课,就差不多了
alignment(lectrue8)
主要对于结构体
struct rec { char c; int i[2]; double v;} *p;unaligned:c(1字节)i[0](4)i[1](4)v[8]aligned:c(1)free(3)i[0](4)i[1](4)free(4)v[8]
aligned data要求数据是k字节,其地址必须是k的倍数;
如果是多个struct相邻,aligned要求是struct地址必须是k的倍数,k是自己内部所有数据中k最大的那个;
同样,可以重排,改变顺序,节省浪费空间
buffer overflow(lec9)
a. 如gets的bug, 进而注入代码等
防护:栈的起始位置随机、canary等
b. return-oriented programming attacksbig endian little endian(lec9):用于多字节对象
例如假设上述变量x类型为int,位于地址0x100处,它的值为0x01234567,地址范围为0x100~0x103字节,其内部排列顺序依赖于机器的类型。大端法从首位开始将是:0x100: 0x01, 0x101: 0x23,..。而小端法将是:0x100: 0x67, 0x101: 0x45,..。
lecture10--optimization
因为compiler能力有限,不能无限优化代码
将某个函数的返回值,存储下来,避免循环里多次调用、以及循环里的乘法等。如果学过compiler知道,compiler是有限的,没必要把一切交给不那么智能的compiler处理
等等,见ppt,这部分不是那么重要,因为这你也记不住
lec11-lec12(memory)
locality(temporal spatial)
Cache: A smaller,faster storage device that acts as a staging area for a subset of the data in a larger, slower device.
cache miss(cold miss, conflict miss, capacity miss)
cache organization(lec12)
direct mapped cache(E=1)write with cache
write hit:
write-through(write immediately to memory)
write-back(defer write to memory until replacement of line)
write miss:
Write-allocate (load into cache, update line in cache)
No-write-allocate (writes straight to memory, does not load into cache)
write-through + no-write-allocate
write-back+write-allocate
矩阵乘法的优化(lec12最后)
lec13(linking)
格式为ELF
linker symbols:global symbols/ external symbols/local symbols(static)
static library \ shared library(at load time\run time)
lec14--15(ecf)
lec16(io)
unix io(read(), write()...)(unbuffered)
standard io(printf()...)(buffered)
linux file(csapp 943)
shared file(open twice)
after fork
lec17--20(vm)
vm in linux(csapp 867页)
malloc
summary
csapp内容很繁杂,很多细节可能一问或者多想就会出错,而csapp自身在广不在深。所以想解决深度问题,可能就需要更进一步学习更深入知识,而csapp不行。
比如linking那里的static library和shared library,elf等等,你不自己实操看源码就很难体会,光靠csapp这本书的理论知识不太够,所以我也就不想太细扣了。打算放下这些问题,进行深入学习了。等把更深入的知识学会,这些问题应该也就不再是问题了,或者是很easy的问题了。
所以吸收csapp的知识作为基础、内功,学习更深入的就行了,这门课就至此彻底结束了。