美文网首页
CSAPP translation page 4

CSAPP translation page 4

作者: 木子9268 | 来源:发表于2019-07-10 22:31 被阅读0次

旁注: GNU项目

GCC是CNU项目开发出来的许多实用工具之一.GNU项目是理查德·马修·斯托曼(Richard Stallman)在1984年发起的一个免税慈善项目,其雄心勃勃的目标是开发一个完整的类Unix系统(Unix-like,类Unix系统)它的源代码能够不受限制的被修改和传播.GNU项目已经开发出一个包含Unix操作系统的所有主要部件的环境,除了内核,内核是有Linux项目中独立发展而来的. GNU的环境包括了EMACS编辑器(editor),GCC编译器(debugger ),GDB调试器(debugger ),汇编器(assembler ),链接器(linker),处理二进制文件(binaries ,二进制文件)的公用程序(utilities )和其他的组件. GCC编译器(compiler)已经发展到支持许多不同的语言,能够为许多不同的机器语言生成代码.它支持的语言包括C,C++,Fortran,Java,Pascal,Objective-C和Ada.

GNU项目一项非凡的成就也是一项被忽略的成就.现代的开源运动(通常是和Linux关联)思想(intellectual )起源于GNU项目里的自由软件概念(notion)(这里的free是”言论自由”里面的自由之意,而不是”免费啤酒”里面的免费之意).进一步, Linux如此受欢迎很大程度上归功于(owes)GNU工具,其为Linux内核提供了环境.

1.3明白编译系统怎样工作是值得的

一个简单的程序例如hello.c,我们可以依靠它的编译系统(compilation system )去产生正确有效的机器代码. 然而, 这里有几个为什么程序员需要明白编译系统怎样工作的重要原因:

优化(optimizing )程序的性能(performance). 现代编译器通常是能够生产好代码的复杂工具.作为一个程序员,我们不需要为了写出高效代码知道在编译器内部的工作.然而,为了在我们的C程序中做出好的编码决策,我们确实需要明白一些基本的东西像机器代码(machine-level code)和编译器怎样把不同的C语句(statements )转换成机器代码.例如,switch语句是否总是比if-else语句更高效?函数调用(function calls)会产生多少开销?while循环是否总是比for循环更加高效?指针引用比数组引用更加高效吗?为什么将循环求和的结果放到一个本地变量中,会比将其放到一个通过引用传递过来的参数中,运行会快很多呢?当我们怎样简单的重新排列(rearrange ,重新排列)算数表达式(arithmetic expression )中的括号(parentheses )时我们的函数会跑得更快?

在第3章里,我们将会说明两个相关的机器语言: IA32, 32位的代码在运行Linux的计算机里无处不在,Windows和最近的其他Macintosh操作系统(operating systems,操作系统)和x86-64,一种在最近的微处理器(microprocessors)中发现的64位拓展. 我们描述编译器怎样把不同的C构造翻译成这种机器语言语言.在第5章, 你将学到怎样对C代码进行简单的转化来帮助编译器更好地完成工作.在第6章,你将要学习存储器系统(memory system)的层次结构,C语言编译器怎样在内存里存储数据数组以及你的C程序怎样利用这些知识更加高效的运行(run).

相关文章

  • CSAPP translation page 4

    旁注: GNU项目 GCC是CNU项目开发出来的许多实用工具之一.GNU项目是理查德·马修·斯托曼(Richard...

  • CSAPP translation page 1

    1.1信息就是位(bits)+上下文(context) 我们的hello 程序生命开始就是一个源程序(或者称为一个...

  • CSAPP translation page 6

    总线 在整个系统中运行的是称为总线(buses)的电导管(electrical conduits)集合,它们在组件...

  • CSAPP translation page 3

    这里,GCC编译器驱动程序读取hello.c源文件然后翻译成一个可执行的目标文件hello. 翻译执行的4个阶段在...

  • CSAPP translation page 7

    第6章详细的讲关于输入/输出设备像磁盘的工作. 在第10章, 你将要学习怎样使用Unix的输入/输出接口从应用程序...

  • CSAPP translation page 10

    这本书当中的一个重要结论(lessons)之一就是,意识到高速缓存存储器的应用程序员能够利用(exploit)它们...

  • CSAPP translation page 8

    •加载:从主存复制一个字节或一个字到寄存器(register)里, 覆盖寄存器以前的内容. •储存:从寄存器复制一...

  • CSAPP translation page 9

    1.5高速缓存非常重要 这个简单的例子有重要的经验,系统花费大量的时间把信息从一个地方传送到另外一个地方. hel...

  • CSAPP translation page 2

    旁注: C编程语言的起源 C语言在1969年到1973年由贝尔实验室由丹尼斯•里奇(Dennis Ritchie)...

  • CSAPP translation page 13

    1.7.1进程 当程序例如hello程序运行在现代系统当中, 操作系统给我们了一个程序只运行在系统里面的错觉(il...

网友评论

      本文标题:CSAPP translation page 4

      本文链接:https://www.haomeiwen.com/subject/qmxlkctx.html