代码揭秘——从C/C++的角度探秘计算机系统
分類: 图书,计算机与互联网,
品牌: 左飞
基本信息·出版社:电子工业出版社
·页码:415 页
·出版日期:2009年09月
·ISBN:9787121093104
·条形码:9787121093104
·包装版本:第1版
·装帧:平装
·开本:16
产品信息有问题吗?请帮我们更新产品信息。
内容简介《代码揭秘:从C/C++的角度探秘计算机系统》从程序设计角度出发,以C/C++为描述语言,以Visual C++为形式工具,将隐藏在代码背后的关于计算机组成原理、计算机操作系统等方面的机制和知识娓娓道来,不仅让读者知其然,更要让读者知其所以然。并让这些知识再反作用于编程实践,从而帮助读者写出更适合机器优化的高质量代码。揭开代码背后鲜为人知的秘密,具体说来,《代码揭秘:从C/C++的角度探秘计算机系统》主要讨论了包括计算机底层编码、内存与指针、计算机指令与代码系统、函数调用的机制、多级存储系统、线程与进程的概念以及代码优化等多个方面的话题。
《代码揭秘:从C/C++的角度探秘计算机系统》既可作为大专院校相关专业师生的教学参考书,也可供计算机及其相关领域的工程技术人员查阅之用,对于普通计算机爱好者,本书也不失为帮助他们理解计算机底层机制的一本深入浅出的计算机读物。
编辑推荐一线专家倾心巨献,内外兼修,步步为营。剥茧抽丝,揭开代码背后鲜为人知的秘密。化繁为简,还原表象掩盖下的计算机本质。
如果你是一名渴望在编程技艺上有所精进的程序设计爱好者,那么《代码揭秘:从C/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和free
4.2 sizeof并不复杂
4.3 内存操作函数
4.3.1 memset
4.3.2 memcpy和memmove
4.4 new和delete
4.5 内存错误面面观
4.5.1 最怕内存泄漏
4.5.2 小心重复释放
4.5.3 指针是个坏东西
4.5.4 超量写内存
4.6 使用Visual C++检查内存泄漏
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 使用Profile
9.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换个角度看计算机
之所以要探究计算机系统的内部结构和工作原理,是为了能够准确地把握代码指令的传递和处理流程,找出限制和降低程序运行效率的关键点所在,从而让程序员能够跟随计算机一同思考,并编写出高效、可靠的代码。要了解计算机系统的内部结构和工作原理并不容易,它至少涉及三门独立的科目:计算机组成原理、计算机操作系统和编译原理。这些都是计算机专业的学生必修的主要课程。但即使将它们逐个学完,若不能加以贯穿和联系,那么一个系统化的知识框架就没办法成功地搭建起来,于是学习成果和功效就会被打折!从程序设计和代码编写的角度将上述知识有机地串接起来是一个不错的主意。
作为一个程序员或者开发人员来说,完全掌握上述科目的知识也实在是一件劳心费神的事,何况似乎掌握了它们也不见对程序开发起到什么明显的推进作用。那这个矛盾该如何解决呢?很简单,就是以程序员最熟悉的方式来诠释这些基础的理论知识。如果能从简单的代码编写出发,思考编译器的工作机制,进而探究计算机系统的工作原理和组织结构,这是一件多么有趣的事情啊!当程序员通过代码编写这一主线将整个流程走完时,一方面,他们可以对计算机系统有一个深入的理解;另一方面,这种理解将反作用于程序设计实践,提高程序员的编码能力,使他们足以写出漂亮、高效的代码。这就是我们所希望做到的。帮助读者走完这一流程的第一步就是先向读者介绍一些基本的概念和必要的准备知识,其中最基础的就是对计算机系统有一个概括的认知。这当然不同于一般的计算机文化基础或者计算机入门知识,我们假设读者都不是“电脑盲”。所谓的对于计算机系统的概括的认知,更重要的是侧重于计算机中指令的传递过程,也就是跟程序运行直接相关的硬件设备,诸如外设之类的硬件则不在我们考虑的范围之内。
……