系统级编程
名词解释:共 5 题
1:指针:是一个变量,可以存储另外一个变量的内存地址,在 C 语言中,我们可以申明一个变量指向内存的地址,而不是数据本身,可以用
“&”获取变量的地址。
2:活动记录:函数调用时分配的一块内存。它通常在栈内被产生,也被栈的框架所调用
3:缓冲溢出:缓冲超过区域,所以重写了边界(Place more than the buffer can hold, so overwrite the boundary
)。
4:静态分配:程序在编译和链接阶段为变量分配内存空间。静态分配的变量在 main 之前分配内存和初始化变量,只到程序终止才释放内存。
每次调用函数不会重新初始化。
5:动态分配:在程序运行期间为变量分配内存空间。其中包括栈分配和堆分配。
6:垃圾回收:自动的收回堆分配的内存空间,它是一种绝对的内存管理,应用程序不必关心内存空间的释放,普遍的流行于现在面向对象的
语言中。
7:墙上时间:它是一种物理的挂在墙上或者戴在手上的表所显示的时间
8 CPU time:直接执行程序所用的时间加上为准备执行程序所花的系统时间。
9:timer:计时器,保存时间特定的时间片段,时间一到,程序转向另外一个状态或执行另外一个操作。
10:profile:用来测量执行一个源代码所花费时间的工具,可以显示程序的执行历史和提供必要的分析,同时它也可以发现一个程序的瓶颈,
所以我们可以使我们的代码更加有效,例如我们可以通过它知道程序的那个部分被频繁的调用,哪些区域可以导致瓶颈等。
11 temporal locality, 时间局部性: Temporal locality entails that addresses that are referenced are soon referenced repeatedly, and should thus be kept in
fast memory.
12 spatial locality, 空间局部性:Spatial locality entails that addresses near a referenced address will soon be accessed and should thus be brought into
fast memory
13 重定位: Compilers and assemblers generate code and data sections that start at address zero. The linker relocates these sections by associating a
memory location with each symbol definition, and then modifying all of the references to those symbols so that they point to this memory location.
14 符号解析: Object files define and reference symbols. The purpose of symbol resolution is to associate each symbol reference with exactly one
symbol definition
15:线程:一个进程中的程序执行路径或控制路径
16:并发:A collection of autonomous(自主的) sequential threads, executing (logically) in parallel
17:异步:一个线程在访问某个资源时,其他的线程不能同时访问该资源。
简答;共 5 题
1:汇编和 编译的区别?(必考)
编译是从源程序产生目标程序的过程。即编译就是把高级语言变成计算机可以识别的 2 进制语言。
用汇编语言编写的程序叫汇编语言,机器不能直接识别,要由汇编程序将汇编语言翻译成机器语言,所以汇编程序把汇编语言翻译成机器语言
的过程称为汇编
3:函数调用的规范?What calling conventions?
主要是描述被调用代码的一下信息:
(1) 参数被分配的顺序 (2)参数被放在什么地方?放在栈里还是 register 中?(3)函数可能使用的 register(4)函数返回值
2:缓冲区溢出的概念以及危害?(必考)
缓冲区溢出就是缓冲超过区域,所以重写了边界。缓冲溢出会造成边界重写,得不到正确的值,在 C 语言中,无法检测是否超过了一个数组
的 buffer,所以要尽量避免缓冲溢出。
3:垃圾回收的概念及方法的简单介绍?(必考)
垃圾回收:自动的收回堆分配的内存空间,它是一种绝对的内存管理,应用程序不必关心内存空间的释放,普遍的流行于现在面向对象的
语言中。主要的方法有:(1)标记清除法:在每一个块的顶部使用一个额外的标记,使用完之后清除这个标记。(2)复制法:使用两个
堆,把一个堆中的数据复制到另一个堆之中。( 3)引用计数法:记录每个对象的指针的数目,当计数为 0 时,该对象被认为是垃圾。
(4)分代式垃圾回收法:频繁的检查年轻的对象是否为垃圾,较少的检查比较老的对象,因为我们认为年轻的对象生命周期比较短。