读书笔记

[图灵程序设计成书]. 程序是怎么跑起来的

1.程序进行小数运算时出错的原因是什么?比如 0.1 累计 100 次为什么是 10.000002 ?

知乎讲解(https://zhuanlan.zhihu.com/p/153518654)

2.浮点数 在程序中怎么表示?什么是单精度? 什么是双精度?

3.++ii++ ?

你很难预计编译器在背后做了什么:i = 1;
i = ++i + ++i;

gcc 编译器:++i;
++i;
i = i + i;
// ---> 6

clang 编译器:a = ++i;
b = ++i;
i = a + b;
// ---> 5

某编译器,進行公共子表达式消除:i = (++i) * 2;
// or
i = (++i) << 1;

// ---> 4所以 (++i)+(++i)+(++i) = 10 是有可能的,但你真的很难预计编译器在背后做了什么。

4. 环形缓冲区?

环形缓冲区
链表
  1. 存储程序方式指的是什么?
.  在存储装置中保存程序,并逐一运行的方式

5.通过使用内存提高磁盘访问速度的机制称为什么?

磁盘缓存 Disk Cache

第一次读取数据 从磁盘读取 ,在之后在使用读取数据, 就在内存中 读取之前保存的数据.

6.把磁盘的一部分作为假想内存来使用的机制称为什么?

虚拟内存
`分段` `分页`
`swap 实现`

4G 的内存 就可以运行 10G 大小的程序了
  1. Windows中,在程序运行时,存储着可以动态加载调用的函数和数据的文件称为什么?
DDL 文件
Dynamic Link Library 

在类似于 Windows 操作系统这样的可以加载多个可执行程序的运行环境中,`每次
运行`时,`程序内的变量`及`函数`被`分配到的内存地址`都是`不同`的。

8.在 EXE 程序文件中,静态加载函数的方式称为什么?

静态链接

9.在 Windows计算机中,一般磁盘的 1 个扇区是多少字节?

512 字节
  1. 内存磁盘 ?
都可以 存储程序命令和数据

内存: 利用电流 实现存储        
磁盘: 利用磁效应实现存储

内存: 高速高价
磁盘: 低速低价

磁盘中的程序 要加载到内存 然后在 CPU 执行

11.文件存储的基本单位是什么?

一个字节 byte(8bit)

12.DOC, LZH, TXT 扩展名中, 哪个 是压缩文件的扩展名?

LZH

13.文件内容用" 数据的值 x 循环次数 " 来表示的压缩方法是RLE 算法还是哈夫曼算法 ? 哈夫曼算法?莫尔斯编码?

RLE算法 压缩文本文件不太适合(连续重复比较少)
AAAABB压缩后为 A4B2

日本人比较常用的压缩软件 LHA 使用的就是哈夫曼算法
哈夫曼算法的关键: 
        多次出现的数据用小于 8 位字节数来表示;
  1. windows 计算机经常使用的 SHIFT JIS 字符编码 中, 1 个半角英数是用几个字节数据来表示的?
1 字节
半角英文数字 1 个字节表示
汉字等全角字符  两个字节表示
  1. BMP(BITMAP) 格式的图像文件, 是压缩过的吗?
没有压缩过, 比 jpeg 格式等压缩过的图像文件大不少
zip 是用 pkzip 等工具压缩过的文件扩展名
  1. 可逆压缩非可逆压缩 ?
压缩过的数据可以复原           可逆压缩
         不可以复原          非可逆压缩
  1. 为什么 java 编写的代码运行速度相对其他语言慢?
Java 虚拟机每次运行时都要把字节 代码变换成本机代码,这一机制是造成运行速
度慢的原因。为此,目 前业界也在努力改善这一问题,比如把首次变换后的本地代
码保存起 来,第 2 次以后直接利用本地代码,或是对字节代码中处理较为费时 的
部分进行优化(改善生成的本地代码质量)等。
  1. 将多个目标文件结合生成 EXE 文件的工具称为什么?
链接器

链接器会从库文件中抽取出必要的目标文件并将其结合到 EXE
文件中。此外,还存在一种程序运行时结合的 DLL 形式的库
文件。

把多个目标文件结合,生成 1 个 EXE 文件的处理就是 链接,运行 连接的程序就称
为 链接器�(linkage editor 或连结器)。Borland C++ 的链 接器就是 ilink32.exe 的命
令行工具。
  1. 在程序运行时,用来动态申请分配的数据和对象的内存区域形式称为什么?
堆

堆的内存空间会根据程序的命令进行申请及释放。
  1. 扩展名为 .obj 的目标文件的内容,是源代码还是本地代码?
本地代码

通过对源文件进行编译,得到目标文件。例如,C 语言中,将
Sample1.c 这个源文件编译后,就会得到 Sample1.obj 这个目标
文件。目标文件的内容是本地代码。
  1. 把多个目标文件收录在一起的文件称为什么?
库文件
  1. 仅包含 Windows 的 DLL 文件中存储的函数信息的文件称为什么?
导入库

把导入库信息结合到 EXE 文件中,这样程序在运行时就可以利
用 DLL 内的函数了。
  1. 类似于 Windows 操作系统这样的可以加载多个可执行程序的运行环 境中,每次运行时,程序内的变量及函数被分配到的内存地址都是不 同的。在 EXE 文件中,变量和函数的内存地址的值,是如何来 表示的呢?
     EXE 文件中给变量及函数分配了`虚拟的内存地址`。在`程序运行`时,虚拟的内存地
址会`转换`成`实际的内存地址`。链接器会在 EXE 文件的开头,`追加`转换内存地址所
需的必要信息。这个信息称为 `再配置信息`。

  1. 用的内存空间进行申请分配和释放的程序的编写方法?
 C 语言中是通过 malloc() 函数来进行 申请分配、通过 free() 函数来释放的。

 C++ 中则是通过 new 运算符 来申请分配、通过 delete 运算符来释放的


无论是 C 语言还是 C++, 如果没有在程序中明确释放堆的内存空间,那么即使在
处理完毕后, 该内存空间仍会一直残留。这个现象称为 内存泄露�( memory leak )
  1. 编译器�和解释器�有什么不同?
`编译器是在运行前对所有源代码进行解释处理的。而解释器则 是在运行时对源代码
的内容一行一行地进行解释处理的`。
  1. “分割编译”指的是什么?
`将整个程序分为多个源代码来编写,然后分别进行编译,最后 链接成一个 EXE 文
件。这样每个源代码都相对变短,便于程序管理`。
  1. Build 指的是什么?
`根据开发工具种类的不同,有的编译器可以通过选择“Build” 菜单来生成 EXE 文
件。这种情况下,Build 指的是连续执行编译和链接`。
  1. 使用 DLL 文件的好处是什么?
 `DLL 文件中的函数可以被多个程序共用。因此,借助该功能可以节约内存和磁
盘。此外,在对函数的内容进行修正时,还不需要重新链接(静态链接)使用这个函
数的程序`
  1. 不链接导入库的话就无法调用 DLL 文件中的函数吗?
`通过使用 LoadLibrary() 及 GetProcAddress() 这些 API,即使不链接导入库,也可
以在程序运行时调用 DLL 文件中的函数。不过使用导入库更简单一些`。
  1. 叠加链接这个术语指的是什么?
`将不会同时执行的函数,交替加载到同一个地址中运行。通过 使用“叠加链接器”这
一特殊的链接器即可实现。在计算机中配置的内 存容量不多的 MS-DOS 时代,经
常使用叠加链接`。
  1. 和内存管理相关的垃圾回收机制指的是什么呢?
   垃圾回收机制(garbage collection)指的是对处理完毕后不再需要的堆内存空间的
数据和对象 B 进行清理,释放它们所使用的内存空间。这里把不需要的数据比喻为垃圾。
进行该处理时,C 语言用的是 free() 函数,C++ 用的是 delete 运算符。在 C++
的基础上开发出来的 Java 及 C# 这些编程语言中,程序运行环境会自动进行垃圾回收。
这样就可以避免由于程序员的疏忽(忘了记述内存的释放处理)而造成内存泄露了。
  1. 监控程序的主要功能内容是什么?
程序的加载和运行
监控程序
监控程序-操作系统
  1. GUI 是什么的缩写?
Grap�hical User Interface(图形用户界面)
  1. WYSIWYG 是什么的缩写?
What You See Is What Your Get(所见即所得)

WYSIWYG 是指可以直接将显示器中显示的内容在打印机上打
印出来。这也是 Windows 的特征之一。
  1. 汇编? 反汇编 ?
汇编 : 汇编语言的源代码转换成本地代码的方式;
反汇编 : 本地代码转换为汇编语言代码的方式;   
  1. 汇编语言的源文件的扩展名,通常是什么格式?
.asm
  1. 汇编语言中段定义指的是什么?
构成程序的命令和数据的集合组
  1. 汇编语言的跳转指令,是在何种情况下使用的?
程序流程跳转到其他地址的时候使用
  1. mov add jmp cmp 汇编语言中的这些指令叫什么?
`助记符`
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容