[图灵程序设计成书]. 程序是怎么跑起来的
1.程序进行小数运算
时出错的原因是什么?比如 0.1 累计 100 次为什么是 10.000002 ?
知乎讲解(https://zhuanlan.zhihu.com/p/153518654)
2.浮点数
在程序中怎么表示?什么是单精度
? 什么是双精度
?
3.++i
和i++
?
你很难预计编译器在背后做了什么: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.堆
栈
和 环形缓冲区
?
栈
堆
环形缓冲区
链表
-
存储程序
方式指的是什么?
. 在存储装置中保存程序,并逐一运行的方式
5.通过使用内存
来提高磁盘访问速度
的机制称为什么?
磁盘缓存 Disk Cache
第一次读取数据 从磁盘读取 ,在之后在使用读取数据, 就在内存中 读取之前保存的数据.
6.把磁盘
的一部分作为假想内存
来使用的机制称为什么?
虚拟内存
`分段` `分页`
`swap 实现`
4G 的内存 就可以运行 10G 大小的程序了
-
Windows
中,在程序运行时,存储着可以动态加载调用的函数和数据的文件
称为什么?
DDL 文件
Dynamic Link Library
在类似于 Windows 操作系统这样的可以加载多个可执行程序的运行环境中,`每次
运行`时,`程序内的变量`及`函数`被`分配到的内存地址`都是`不同`的。
8.在 EXE 程序文件
中,静态加载函数
的方式称为什么?
静态链接
9.在 Windows
计算机中,一般磁盘的 1 个扇区
是多少字节?
512 字节
-
内存
和磁盘
?
都可以 存储程序命令和数据
内存: 利用电流 实现存储
磁盘: 利用磁效应实现存储
内存: 高速高价
磁盘: 低速低价
磁盘中的程序 要加载到内存 然后在 CPU 执行
11.文件存储
的基本单位是什么?
一个字节 byte(8bit)
12.DOC
, LZH
, TXT
扩展名中, 哪个 是压缩文件的扩展名?
LZH
13.文件内容用" 数据的值 x 循环次数 " 来表示的压缩方法是RLE 算法还是哈夫曼算法
? 哈夫曼算法?莫尔斯编码?
RLE算法 压缩文本文件不太适合(连续重复比较少)
AAAABB压缩后为 A4B2
日本人比较常用的压缩软件 LHA 使用的就是哈夫曼算法
哈夫曼算法的关键:
多次出现的数据用小于 8 位字节数来表示;
-
windows
计算机经常使用的 SHIFT JIS字符编码
中, 1 个半角英数是用几个字节数据来表示的?
1 字节
半角英文数字 1 个字节表示
汉字等全角字符 两个字节表示
-
BMP(BITMAP) 格式
的图像文件, 是压缩过的吗?
没有压缩过, 比 jpeg 格式等压缩过的图像文件大不少
zip 是用 pkzip 等工具压缩过的文件扩展名
-
可逆压缩
和非可逆压缩
?
压缩过的数据可以复原 可逆压缩
不可以复原 非可逆压缩
- 为什么 java 编写的代码运行速度相对其他语言慢?
Java 虚拟机每次运行时都要把字节 代码变换成本机代码,这一机制是造成运行速
度慢的原因。为此,目 前业界也在努力改善这一问题,比如把首次变换后的本地代
码保存起 来,第 2 次以后直接利用本地代码,或是对字节代码中处理较为费时 的
部分进行优化(改善生成的本地代码质量)等。
- 将多个目标文件结合生成 EXE 文件的工具称为什么?
链接器
链接器会从库文件中抽取出必要的目标文件并将其结合到 EXE
文件中。此外,还存在一种程序运行时结合的 DLL 形式的库
文件。
把多个目标文件结合,生成 1 个 EXE 文件的处理就是 链接,运行 连接的程序就称
为 链接器�(linkage editor 或连结器)。Borland C++ 的链 接器就是 ilink32.exe 的命
令行工具。
- 在程序运行时,用来
动态申请分配
的数据和对象的内存区域形式称为什么?
堆
堆的内存空间会根据程序的命令进行申请及释放。
- 扩展名为
.obj
的目标文件的内容,是源代码还是本地代码?
本地代码
通过对源文件进行编译,得到目标文件。例如,C 语言中,将
Sample1.c 这个源文件编译后,就会得到 Sample1.obj 这个目标
文件。目标文件的内容是本地代码。
- 把多个目标文件收录在一起的文件称为什么?
库文件
- 仅包含 Windows 的 DLL 文件中存储的函数信息的文件称为什么?
导入库
把导入库信息结合到 EXE 文件中,这样程序在运行时就可以利
用 DLL 内的函数了。
- 类似于 Windows 操作系统这样的可以加载多个可执行程序的运行环 境中,每次运行时,程序内的变量及函数被分配到的内存地址都是不 同的。在 EXE 文件中,变量和函数的内存地址的值,是如何来 表示的呢?
EXE 文件中给变量及函数分配了`虚拟的内存地址`。在`程序运行`时,虚拟的内存地
址会`转换`成`实际的内存地址`。链接器会在 EXE 文件的开头,`追加`转换内存地址所
需的必要信息。这个信息称为 `再配置信息`。
-
堆
用的内存空间
进行申请分配和释放
的程序的编写方法?
C 语言中是通过 malloc() 函数来进行 申请分配、通过 free() 函数来释放的。
C++ 中则是通过 new 运算符 来申请分配、通过 delete 运算符来释放的
无论是 C 语言还是 C++, 如果没有在程序中明确释放堆的内存空间,那么即使在
处理完毕后, 该内存空间仍会一直残留。这个现象称为 内存泄露�( memory leak )
-
编译器
�和解释器
�有什么不同?
`编译器是在运行前对所有源代码进行解释处理的。而解释器则 是在运行时对源代码
的内容一行一行地进行解释处理的`。
- “分割编译”指的是什么?
`将整个程序分为多个源代码来编写,然后分别进行编译,最后 链接成一个 EXE 文
件。这样每个源代码都相对变短,便于程序管理`。
-
Build
指的是什么?
`根据开发工具种类的不同,有的编译器可以通过选择“Build” 菜单来生成 EXE 文
件。这种情况下,Build 指的是连续执行编译和链接`。
- 使用 DLL 文件的好处是什么?
`DLL 文件中的函数可以被多个程序共用。因此,借助该功能可以节约内存和磁
盘。此外,在对函数的内容进行修正时,还不需要重新链接(静态链接)使用这个函
数的程序`
- 不链接导入库的话就无法调用 DLL 文件中的函数吗?
`通过使用 LoadLibrary() 及 GetProcAddress() 这些 API,即使不链接导入库,也可
以在程序运行时调用 DLL 文件中的函数。不过使用导入库更简单一些`。
-
叠加链接
这个术语指的是什么?
`将不会同时执行的函数,交替加载到同一个地址中运行。通过 使用“叠加链接器”这
一特殊的链接器即可实现。在计算机中配置的内 存容量不多的 MS-DOS 时代,经
常使用叠加链接`。
- 和内存管理相关的
垃圾回收机制
指的是什么呢?
垃圾回收机制(garbage collection)指的是对处理完毕后不再需要的堆内存空间的
数据和对象 B 进行清理,释放它们所使用的内存空间。这里把不需要的数据比喻为垃圾。
进行该处理时,C 语言用的是 free() 函数,C++ 用的是 delete 运算符。在 C++
的基础上开发出来的 Java 及 C# 这些编程语言中,程序运行环境会自动进行垃圾回收。
这样就可以避免由于程序员的疏忽(忘了记述内存的释放处理)而造成内存泄露了。
-
监控程序
的主要功能内容是什么?
程序的加载和运行
监控程序
监控程序-操作系统
- GUI 是什么的缩写?
Grap�hical User Interface(图形用户界面)
- WYSIWYG 是什么的缩写?
What You See Is What Your Get(所见即所得)
WYSIWYG 是指可以直接将显示器中显示的内容在打印机上打
印出来。这也是 Windows 的特征之一。
-
汇编
?反汇编
?
汇编 : 汇编语言的源代码转换成本地代码的方式;
反汇编 : 本地代码转换为汇编语言代码的方式;
- 汇编语言的源文件的扩展名,通常是什么格式?
.asm
- 汇编语言中
段定义
指的是什么?
构成程序的命令和数据的集合组
- 汇编语言的跳转指令,是在何种情况下使用的?
程序流程跳转到其他地址的时候使用
-
mov
add
jmp
cmp
汇编语言中的这些指令叫什么?
`助记符`