出版时间:2009.8 出版社:电子工业出版社 作者:左飞 页数:415
Tag标签:无
内容概要
《代码揭秘:从C/C++的角度探秘计算机系统》从程序设计角度出发,以C/C++为描述语言,以Visual C++为形式工具,将隐藏在代码背后的关于计算机组成原理、计算机操作系统等方面的机制和知识娓娓道来,不仅让读者知其然,更要让读者知其所以然。并让这些知识再反作用于编程实践,从而帮助读者写出更适合机器优化的高质量代码。揭开代码背后鲜为人知的秘密,具体说来,《代码揭秘:从C/C++的角度探秘计算机系统》主要讨论了包括计算机底层编码、内存与指针、计算机指令与代码系统、函数调用的机制、多级存储系统、线程与进程的概念以及代码优化等多个方面的话题。 《代码揭秘:从C/C++的角度探秘计算机系统》既可作为大专院校相关专业师生的教学参考书,也可供计算机及其相关领域的工程技术人员查阅之用,对于普通计算机爱好者,本书也不失为帮助他们理解计算机底层机制的一本深入浅出的计算机读物。
书籍目录
第1章 绪论1.1 计算机系统初探1.1.1 换个角度看计算机1.1.2 CPU很好很强大1.2 计算机语言与编译技术1.2.1 如何让机器理解你1.2.2 编译技术与开发环境1.2.3 程序开发流程1.3 C语言神话1.3.1 C语言的历史1.3.2 简单说说C语言的特点1.4 奇迹的延续1.4.1 C++的产生与发展1.4.2 C++与面向对象思想1.5 本章小结第2章 揭开数据表示的面纱2.1 进制系统2.1.1 最简单的计数方式2.1.2 计算机里只有黑白2.1.3 压缩表示的二进制2.2 位与位操作2.2.1 计算机存储的单位2.2.2 位操作和位段2.3 计算机中的数值2.3.1 一种最简单的数2.3.2 现实世界需要负数2.3.3 只有整数还不够2.4 让计算机学会写字2.4.1 ASCII码2.4.2 汉字编码2.4.3 更强大的编码2.5 C语言基本数据类型2.5.1 整型2.5.2 字符型2.5.3 注意浮点数陷阱2.6 本章小结第3章 变量与地址3.1 程序都在内存中3.2 很多初学者都怕指针3.3 睁大眼睛看内存3.4 数组与指针是近亲3.5 再谈指针3.6 本章小结第4章 动态内存管理4.1 malloc和free4.2 sizeof并不复杂4.3 内存操作函数4.3.1 memset4.3.2 memcpy和memmove4.4 new和delete4.5 内存错误面面观4.5.1 最怕内存泄漏4.5.2 小心重复释放4.5.3 指针是个坏东西4.5.4 超量写内存4.6 使用VisualC++检查内存泄漏4.7 本章小结第5章 代码与指令系统5.1 还原代码的本来面目5.1.1 内存中的代码5.1.2 指向函数的指针5.1.3 CPU的存储器5.1.4 寄存器变量5.1.5 寄存器组举例5.2 指令——简单or复杂5.2.1 指令格式5.2.2 操作类型5.2.3 操作数类型5.3 如何找到地址5.3.1 下一步该做什么5.3.2 计算机知道自己需要什么5.4 本章小结第6章 函数与函数调用6.1 函数与参数6.1.1 C/C++中的函数6.1.2 参数传递6.1.3 作用域6.2 函数的递归调用6.2.1 到处都是递归6.2.2 小心使用递归6.2.3 递归与非递归6.2.4 内、外部变量分配原理6.3 内存的使用6.3.1 活动记录与栈6.3.2 静态分配6.3.3 有静就有动6.4 程序在内存中的模样6.5 本章小结第7章 多级存储系统7.1 存储系统及层级结构7.1.1 存储器分类7.1.2 存储器的层级结构7.1.3 访问的局部性原理7.1.4 再谈存储器的层级7.2 高速缓存7.2.1 缓存设计策略7.2.2 多级缓存原理7.2.3 实际编码指导7.3 虚拟内存7.3.1 何为虚拟内存7.3.2 虚拟地址7.3.3 页面请求与磁盘缓冲7.3.4 工作集合与系统颠簸7.3.5 虚拟内存与性能影响7.4 本章小结第8章 操作系统交互8.1 多任务8.1.1 串行与并行8.1.2 多任务的实现8.1.3 并发程序设计8.2 进程8.2.1 进程的概念8.2.2 进程的状态8.2.3 进程控制块8.3 Win32进程编程8.3.1 创建进程8.3.2 环境变量8.4 线程8.4.1 线程的概念8.4.2 多线程8.4.3 超线程8.4.4 线程池8.5 调度8.5.1 处理器的调度8.5.2 调度算法准则8.5.3 常见的调度算法8.6 Win32线程编程8.6.1 创建和退出线程8.6.2 挂起和恢复线程8.6.3 远程线程的注入8.7 本章小结第9章 瓶颈与优化9.1 优化还是不优化9.2 测量与分析的内容9.3 测量与分析的方法9.3.1 使用计时器9.3.2 使用Profile9.3.3 使用性能监视器9.4 基本规律9.4.1 二八法则9.4.2 安达尔定律9.5 程序优化路线9.5.1 优化实践的经典案例9.5.2 优化案例的启示9.6 编译器不是万能的9.7 实际优化建议9.7.1 循环条件中的低效9.7.2 注意字符串的操作9.7.3 权衡函数调用需求9.7.4 转换指针形式代码9.7.5 检查存储器的访问9.7.6 使用循环展开技术9.7.7 查表替换复杂运算9.7.8 耗时计算移出循环9.8 本章小结附录A浅谈编程能力的培养与提高附录B程序人生参考文献
章节摘录
第1章 绪论 1.1 计算机系统初探 孙子兵法中言:知己知彼,百战不殆。为了写出高效的代码,最大程度地提高程序运行效率,我们必须更好地理解计算机这样一个看似复杂的系统。本节将给出一些关于计算机系统的基本的概念,其中提出的一些问题或者技术细节都是本书后续内容中要讨论的重点。 1.1.1 换个角度看计算机 之所以要探究计算机系统的内部结构和工作原理,是为了能够准确地把握代码指令的传递和处理流程,找出限制和降低程序运行效率的关键点所在,从而让程序员能够跟随计算机一同思考,并编写出高效、可靠的代码。要了解计算机系统的内部结构和工作原理并不容易,它至少涉及三门独立的科目:计算机组成原理、计算机操作系统和编译原理。这些都是计算机专业的学生必修的主要课程。但即使将它们逐个学完,若不能加以贯穿和联系,那么一个系统化的知识框架就没办法成功地搭建起来,于是学习成果和功效就会被打折!从程序设计和代码编写的角度将上述知识有机地串接起来是一个不错的主意。 作为一个程序员或者开发人员来说,完全掌握上述科目的知识也实在是一件劳心费神的事,何况似乎掌握了它们也不见对程序开发起到什么明显的推进作用。那这个矛盾该如何解决呢?很简单,就是以程序员最熟悉的方式来诠释这些基础的理论知识。如果能从简单的代码编写出发,思考编译器的工作机制,进而探究计算机系统的工作原理和组织结构,这是一件多么有趣的事情啊!当程序员通过代码编写这一主线将整个流程走完时,一方面,他们可以对计算机系统有一个深入的理解;另一方面,这种理解将反作用于程序设计实践,提高程序员的编码能力,使他们足以写出漂亮、高效的代码。这就是我们所希望做到的。帮助读者走完这一流程的第一步就是先向读者介绍一些基本的概念和必要的准备知识,其中最基础的就是对计算机系统有一个概括的认知。这当然不同于一般的计算机文化基础或者计算机入门知识,我们假设读者都不是“电脑盲”。所谓的对于计算机系统的概括的认知,更重要的是侧重于计算机中指令的传递过程,也就是跟程序运行直接相关的硬件设备,诸如外设之类的硬件则不在我们考虑的范围之内。 ……
编辑推荐
一线专家倾心巨献,内外兼修,步步为营。剥茧抽丝,揭开代码背后鲜为人知的秘密。化繁为简,还原表象掩盖下的计算机本质。 如果你是一名渴望在编程技艺上有所精进的程序设计爱好者,那么这本书就是助你成为编程高手的制胜法宝; 如果你是一名正苦于无法突破编程瓶颈的程序员,那么这本书就是帮你打通任督二脉的武林秘籍; 如果你是一名感觉书本知识仍然无法内化的计算机专业学生,那么本书就是替你拨云开雾、指点迷津的通天灯塔。 本书从程序设计角度出发,以C/C++为描述语言,以Visual C++为形式工具。将隐藏在代码背后的关于计算机组成原理、计算机操作系统等方面的机制和知识娓娓道来,不仅让读者知其然,更要让读者知其所以然。而且,让这些知识再反作用于编程实践,从而帮助读者写出更适合机器优化的高质量代码。
图书封面
图书标签Tags
无
评论、评分、阅读与下载