参数说明:   valid"> 第七周读书笔记 - 11GX
首页 > 第七周读书笔记

第七周读书笔记

《深入理解计算机系统》从程序设计与性能优化的角度介绍了计算机系统,让我从程序员的角度了解了计算机系统,更深入地理解了硬件、操作系统和编译系统等对应用程序性能和正确性的影响,并掌握了基本的程序优化设计技术,为编写更高效可靠的程序打下了基础。下面是我在阅读过程中的一些技术领悟与心得体会。

1、信息表示

在信息表示板块我了解了数据在计算机中的表示,不同的机器有不同的字长和顺序约定,包括大端法和小端法,就连程序也是字节序列。当然,计算机中的数据都有一定的类型,决定了它的范围、大小和操作方式。如果不注意这些性质就容易在程序中产生致命的错误。例如,有符号数在和无符号数比较时,有符号数会被隐式转换为无符号数。隐式转换过程中位表示形式没有变化,但是理解方式发生了变化,于是就会出现负数变为大正数的现象。在符号拓展时,会出现符号位复制的现象,在进行加法和乘法运算时,还要注意溢出问题。在大多数机器中,移位和加运算比乘法快得多,但负数除以2的幂需要注意按情况进行修正。以上这些虽然看起来是小问题,但在编写程序过程中却极容易出错,对计算机算术的深刻理解是编写可靠程序的关键。

2、汇编语言

这部分首先介绍了Intel处理器的发展史,概览了处理器核心数及频率变化,及x86指令集和64位架构发展史,然后介绍了c语言、汇编码和机器码,汇编语言中的数据传送指令及算术指令。接下来介绍了用于控制的条件码以及条件分支结构,各种循环的异同和switch语句。

       我体会到,由于汇编代码非常接近于计算机执行的实际机器代码,阅读这些代码使我们更能够理解编译器的优化能力,并分析出代码中的潜在低效率。我们还了解了栈帧结构,知道了过程调用离不开栈指针和帧指针,以及转移控制指令。在数组介绍中,我知道了高维数组的内存分配的行优先顺序,进一步学习了指针访问方式;在结构数据类型中,我惊讶的发现结构成员的顺序会影响结构变量的大小,因为对齐条件——某种数据类型的地址必须是某个值的倍数——以及边界条件,即结构末尾可能会有填充。最后我还了解了缓冲区溢出。这是因为c对数组引用不进行任何边界检查,所以对越界的数组元素的写操作会破坏储存在栈中的状态信息,从而可能出现很严重的错误。对于程序员而言,使用gets等能导致储存溢出的函数,都是不好的习惯。

以前写程序,都只关注最表面的东西,从未了解过计算机的实现过程和代价。初读这本书,了解一些计算机的实现过程,不但能帮助我理解计算机的优化原理,对学习其他课程也有帮助。

转载于:https://www.cnblogs.com/ustcccj/p/8883743.html

更多相关:

  • 结缘计算机 说到与计算机结识,在看完一众大佬的博文,不得不承认人与人之间的差距——人家小时侯碰到电脑之后开始各种编程骚操作,而我小学时接触到电脑却是从红色警戒、傲视三国、侠盗飞车一路走来。那时候小,家里也没有什么很好的学习环境,虽然喜欢玩游戏却也没有什么编程、游戏开发的概念,老师布置的作文《我的梦想》我和很多人一样写的是科学家。 高考...

  • (活动目录,域,AD) 此系统的本地策略不允许您采用交互式登录解决方法如果计算机是一台不在域中的单独的Windows 2000计算机,参考以下步骤:1) 启动故障计算机至登录状态;2) 登录到网络中的另外一台Windows 2000 或Windows XP的计算机上,打开开始,单击运行,键入cmd,回车;3) 在命令行模式下运行ne...

  • 最近公司要做一个企业微信的小程序,方便企业内的成员来登录,以便一些公司内的业务,只限于公司内的成员来操作,因为有微信小程序的开发经验,所以先当作微信小程序来开发了!首先来讲一下这个企业微信小程序与微信小程序登录的不同,下面是微信小程序登录的流程:小程序内需要调用wx.login(),获取临时登录凭证code,并回传到开发者服务器,然后...

  • sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。其第一个元素是程序本身,随后才依次是外部给予的参数。下面我们通过一个极简单的test.py程序的运行结果来说...

  •   标题:创意虾-程序纹理Blender大师班 信息: 什么是程序纹理? 程序纹理将简单的数学转换为无限的真实感着色器,具有无限的多样性和分辨率。 超越看起来像一团像素特写的图像纹理,运用程序纹理的力量,清晰的细节和没有重复的模式。 你是不是在玩节点滑块,得到了一些有趣的结果,但不确定引擎盖下到底发生了什么?掌握了节...

  • gprof用于分析函数调用耗时,可用gprof分析最耗时的函数,以便优化程序。 gcc链接时也一定要加-pg参数,以使程序运行结束后生成gmon.out文件,供gprof分析。 gprof默认不支持多线程程序,默认不支持共享库程序。 gcc 编译程序时添加编译选项-pg 运行程序,程序退出时生成 gmon.outgprof ./...

  • 一.虚拟机、linux简介 简单介绍一下虚拟机还有就是各种操作系统,比如centos,Ubuntu 操作系统:linux(centos、Ubuntu、redhat),Android,Windows(xp、win8、win10) 进程,多个程序,分时技术,并行技术 一次打开多个程序,我们在只有一个cpu,如何让这些程序进...

  • 一.  结构的基本知识 聚合数据类型能够存储多个数据,C语言提供了两种类型的聚合数据类型,数组和结构。数组是相同的数据,结构是不同类型的数据聚合。结构也是一些值得集合,这些值成为它的成员,每个结构都有它的名字,他们是通过名字来访问的。 1.      结构声明 在结构声明时,必须列出它包含的所有成员,这个列表包括每个成员的类型和...

  •   在前面认识C中的结构体中我介绍了结构体的基础知识,下面通过这段代码来回顾一下: 1 #include 2 #define LEN 20 3 4 struct Student{ //定义结构体 5 char name[LEN]; 6 char address[...

  • Hibernate 配置参数hibernate.hbm2ddl.auto  Hibernate中的配置文件:              参数说明:   valid...