![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CSAPP学习笔记
文章平均质量分 53
PYB不开心
这个作者很懒,什么都没留下…
展开
-
CSAPP读书笔记第二章:
着一章主要介绍了数据才计算机里面的二进制存储,一些位运算的小技巧和一些程序中可能出现的错误。[0][0]高位取反低位不变:利用异或x^(~0xff)[1][1]利用位运算交换两个数:y = x^yx = y^xy = y^x注意,这一段代码存在一个隐藏的陷阱,如果x,y同时指向一个变量,那么第一步就会把这两个变量同时变成0,这样后面的答案全没有意义了。所以要注意这一点。[2][2]无符号和有符号原创 2016-10-09 23:41:40 · 629 阅读 · 0 评论 -
CSAPP第四章读书笔记
(1)将指令编码成为字节序列(1)将指令编码成为字节序列每一个不同类型的指令都有着不一样的起始字节,根据类型的不同编码的长度和格式也不一样。 注意立即数和地址在小端序列的存储中要倒着排序。(2)我们可以探测IA32指令上(2)我们可以探测IA32指令上push %esp的行为,到底是把原始值入栈,还是把减去4以后的值入栈。最后发现保存的是原始值.(3)布尔表达式与组合电路(3)布尔表达式与组合电路原创 2016-10-18 10:10:32 · 2083 阅读 · 0 评论 -
CSAPP读书笔记第六章(优化cache命中率)
(1)局部性:(1)局部性:程序具有时间局部性和空间局部性.时间局部性是指当前用的存储器位置可能在不久的将来被用到,会被放入告诉缓存。空间局部性则是指一个存储器位置被用到,那么相邻的几个位置在不久的将来也可能被用到,也会被放入告诉缓存!根据我在vs2013的测试,发现sum函数要比sum2快几十倍的速度,这完全得益于我们按照行来访问,这天然的符合vector的存储方式,另外在release情况下编译原创 2016-10-26 22:05:38 · 5604 阅读 · 0 评论 -
Csapp读书笔记:第五章
(1)(1)安全优化,编译器在进行优化的时候必须考虑所有的情况,只执行安全的优化。所以可能会限制很多可能的优化策略。如果写出上面这样的代码,当xp==yp的时候,最后的结果等于0。否则xp和yp指向的对象进行了一次交换。由于有两种可能的情况,限制了编译器可能进行的优化.另外函数的调用改变了全局变量也可能造成优化限制。使用内联函数可能可以避免这种限制,有些编译器在较高的优化级别也可能会进行内联函数替换原创 2016-10-25 14:09:16 · 3986 阅读 · 0 评论 -
CSAPP读书笔记第七章:(变量作用域与链接器)
[1]程序经过预处理和编译之后变成可重定位目标文件。每一个可重定位目标文件都有一个表,这个表含有当前文件定义的变量(函数),引用的函数。这些变量有几种类型:(1)当前模块定义的全局变量(非static)(2)当前模块定义全局变量(非static)(3)非当前模块定义的但是却被当前模块引用。所有的局部变量都是不被连接器care的。[2]当有多个文件的时候,每一个Global变量都是全局可见的。所以如果原创 2016-11-06 16:14:25 · 3069 阅读 · 0 评论 -
csapp第三章读书笔记
着一章主要讲了各种汇编的指令。基本要求是看懂即可。不需要会写。几种传输指令:几种传输指令:主要搞清楚(0)(0)几种寻址模式(1)(1)指令的后缀,l,w,b分别代表双字,单字,单字节。注意只有%eax才可以作为存储器的引用(因为它有32位可以作地址)。另外指令的后缀必须要和寄存器的类型对应上才可以,比如movl %ax就是不可以的. (2)简单的逆向工程理解汇编和c的对应(2)简单的逆向工程理解原创 2016-10-10 23:48:13 · 3100 阅读 · 3 评论 -
CSAPP第八章:读书笔记
[1][1]前面讲了异常流的处理。[2][2]进程的概念,fork()一次,返回两次。子进程返回的是0,父进程返回的是子进程的pid。看一个例子:很明显子进程会输出x=2,x=0,而父进程则会输出x=0.[3][3]waitid,用来挂起指定进程直到该进程返回:如果指定的pid=-1,那么则指定进程是当前所有进程的子进程。看一个例子:很明显这里有三种输出:bacc,abcc,acbc.书上答案有误。原创 2016-11-08 14:06:58 · 2982 阅读 · 0 评论 -
CSAPP第十二章读书笔记
这一章讲了并行的三种机制:[1]基于进程的并行:[2]基于I/O多路复用的并行:基本思路是使用select函数,使得内核挂起进程,只有某一个I/O或者多个I/O事件发生之后,才会将内核返回给应用程序。[3]基于线程的并行:在这里还引入了信号量和锁的机制,我们利用信号量进行对共享资源的保护:互斥。还可以利用信号量来调度共享资源,比如消费者,生产者,读-写这种模型。利用缓冲区,我们可以将一个web服务器原创 2016-11-23 12:39:20 · 539 阅读 · 0 评论