csapp遗留
再次拜读csapp_2ed,仍然存在大量不足,部分习题尝试做了解答,还是有些不会,一些临碎的记录如下:
p_159: sizeof运算符的返回值为size_t,无符号整型; 2.75
ANSI C明确规定不允许编译器改变结构体成员对象的次序;如果让编译器随心所欲地改变结构体中各个对象的位置的话,显存的程序大部分都会崩溃。在C语言中,函数往往通过在结构体地址上加上偏移量来计算变量的位置。
p_466: ARM中PC为当前指令地址+8通过典型的5级流水显然很容易理解,问题在于mips体系中分支延迟槽的实现问题又一次困扰住自己了(原来看了《计算机组成与设计》,上面讲了,没有留下笔记,有时间还得再看下)
p_543 p_551:我对于循环展开的理解:1、循环展开的主要意义不在于减少多少次分支判定,因为对于现代处理器而言,分支预测率已经很高,当然循环展开可以减少分支指令执行的次数;2、循环展开增加了一些临时量的利用效率;3、循环展开更大的意义在于提高了执行单元中多个执行单元的利用率(multi issue就应该有多个ALU)
p_675: 6.46可以运用第五章的方法减少对load_store次数、减少指令条数,当时关于如何提高cache的利用率,这一题我还没有更好的方法来解决.
p_786: int sigaction(int signum, struct sigaction* act, struct sigaction* oldact);
p_841: 不理解swap_space;
还有一句话:the swap cache bounds the total amount of virtual pages that can be allocated by the currently running processes.
疑问出自p_840 Linux Page Fault Exception Handling
关于栈空间的自动扩展疑问(看到内核时再来解答):
由于栈空间是自动扩展的,因此当在栈空间存放临时变量时就可能会出现Page Fault,内核应该会分配新的virtual
page给当前进程,并映射到某个physical page;当时我们也可以强行的向堆以上未分配的virtual
space进行写啊,为什么内核就会报错,而对于栈却能处理好呢?
p_915, p_1025 : 不理解对socket的读写操作
p_959: 对11章并不很理解,其中有一段话不涉及网络操作,但是并不理解:
Once we have mapped the file to memory, we no longer need its descriptor, so we close the file. Failing to do this would introduce a potentially fatal memory leak.
p_1020: 此处的题目可以通过别的方法解决,但是还是认为用图示的方法解决最好,但是没看懂该页上的progress graph.