csapp

Computer Systems A Programmer’s Perspective ----阅读翻译日志

那年仲夏 提交于 2020-04-18 10:39:53
借助google 翻译读一下这本书吧,做个记录 Computer Systems A Programmer’s Perspective 简称 --CSAPP 译文: 从程序员的角度透视计算机系统 Randal E. Bryant Carnegie Mellon University 卡内基·梅隆大学 David R. O’Hallaron Carnegie Mellon University and Intel Labs卡内基梅隆大学和英特尔实验室 Chapter 1 A Tour of Computer Systems 第1章计算机系统之旅 A computer system consists of hardware and systems software that work together to run application programs. Specific implementations of systems change over time, but the underlying concepts do not. All computer systems have similar hardware and software components that perform similar functions. This book is written for

【CSAPP笔记】10. 代码优化

谁说我不能喝 提交于 2020-04-06 05:48:09
写程序的主要目标是使它在所有可能的情况下都能正确运行(bug free),一个运行得很快但有 bug 的程序是毫无用处的。在 bug free 的基础上,程序员必须写出清晰简洁的代码,这样做是为了今后检查代码或修改代码时,其他人能够读懂和理解代码。另一方面,让程序运行得更快也是一个很重要的考虑因素。不过,程序获得最大加速比的时候,是它第一次运行起来的时候。 在提到优化程序性能时(Code optimization),我们往往会想到算法与数据结构中的一个概念——复杂度。事实上,除了算法复杂度之外,仍然有许多的代码书写小细节可以改进性能表现。不过,编写高效的程序,第一个考虑的还是选择一组合适的算法与数据结构,因为算法复杂度影响还是相当大的,而且通常比其他常量因素更重要。第二点,我们必须写出编译器能够有效优化以转换成高效可执行代码的源代码。对于第二点,理解程序是如何被编译和执行、理解处理器和存储器系统是如何运作的、理解编译器优化的局限性是很重要的。在程序开发过程中,程序员必须在实现和维护程序的简单性与它的运行速度之间做出权衡,也就是在尽量不破坏程序的模块化和通用性的前提下,做到对代码性能的优化。 即使是最好的编译器也受到 妨碍优化的因素 (optimization blocker)的阻碍,程序员必须编写容易优化的代码,来 帮助 编译器(很让人眼界一新的观点)。研究程序的汇编代码

CSAPP 3-1 程序地机器级表示

和自甴很熟 提交于 2019-11-30 06:34:39
1 本章总述 1) 通过让编译器产生机器级程序的汇编表示, 学习了编译器及其优化能力, 以及机器、数据类型和指令集; 2) 学习了程序如何将数据存储在不同的内存区域中 —— 程序开发人员需要知道一个变量是存储在运行时栈中, 亦或是在某个动态分配的数据结构中, 还是全局程序数据的一部分; 3) 程序是以指令序列来表示的, 每条指令都完成一个单独的操作; 部分程序状态, 比如寄存器和运行时栈, 对程序开发人员来说是直接可见的; 4) 编译器必须使用多条指令来产生和操作各种数据结构, 以及实现包括条件、循环和过程等在内的控制结构; 2 扩展内容 (1) C 语言中缺乏边界检查, 这就是的许多程序容易出现缓冲区溢出 —— 容易受到恶意入侵和攻击. (2) 编译 C++ 和 C 的区别: C++ 的早期实现只是简单地执行了从 C++ 源到 C 源的转换, 并对结果运行 C 编译器, 产生目标代码; C++ 的对象用结构来表示, 类似于 C 中的 struct ; C++ 的方法使用指向实现方法的代码的指针来表示的. (3) Java 的编译方式: Java 的目标代码是一种特殊的二进制表示 —— Java 字节码 —— 可以看作是虚拟机的机器级程序; Java 用字节码作为程序的低级表示, 优势是: 相同的代码可以在许多不同的机器上执行, 只需要在不同的机器上安装 Java 虚拟机(JVM