Linux C 基础简答题 2

(1)数组和指针的区别?

(1)空间分配指针是动态分配空间,通过malloc在堆上分配所需要的空间,分配的空间不一定连续,在使用完之后需要调用free()来释放分配空间。而数组是静态分配空间,在全局变量区或者栈上分配空间,分配的空间是连续的,局部变量在生命周期结束后自动释放,全局变量在程序结束完自动释放。
(2)访问效率
指针是通过地址间接访问,而数组是直接访问数值。因此指针的访问效率低,数组的访问效率高。
(3)安全性
指针使用不当会造成内存泄漏,数组使用不当会造成数组越界。
(4)函数参数
数组要用相应的指针当形参,而指针要用指针的指针来当形参。
(5)字节大小
指针的字节大小是固定的,由操作系统决定。数组的字节大小由数组大小和数组指向的类型共同来决定。
(6)标识符
指针名是变量,数组名是指针常量。所以指针p可以进行p++,而数组名不可以用于a++。
(7)对应的内存空间
指针保存的是地址,数组保存的是数值。

(2)const存储在哪里?如何保持不变?
const全局变量存储在只读数据段,编译期最初将其保存在符号表中,第一次使用时为其分配内存,在程序结束时释放,const局部变量存储在栈中,代码块结束时释放。

(3)什么是预编译?什么时候需要预编译?
预编译又称为预处理 , 是做些代码文本的替换工作。
处理以# 开头的指令 , 比如拷贝 #include 包含的文件代码,#define 宏定义的替换 , 条件编译等,就是为编译做的预备工作的阶段。

主要处理#开始的预编译指令,预编译指令指示了在程序正式编译前就由编译器进行的操作,可以放在程序中的任何位置。

C 编译系统在对程序进行通常的编译之前,首先进行预处理。
 c 提供的预处理功能主要有以下三种:
 1 )宏定义 
 2 )文件包含 
 3 )条件编译
何时需要预编译:
总是使用不经常改动的大型代码体。
程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个“预编译头”

 
(4)说出const和#define的区别?
首先阐述两者区别
就起作用的阶段而言: #define是在编译的预处理阶段起作用,而const是在 编译、运行的时候起作用。
就起作用的方式而言: #define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。
就存储方式而言:#define只是进行展开,有多少地方使用,就替换多少次,它定义的宏常量在内存中有若干个备份;const定义的只读变量在程序运行过程中只有一份备份。
从代码调试的方便程度而言: const常量可以进行调试的,define是不能进行调试的,因为在预编译阶段就已经替换掉了。
综上所述const有以下几个优点
(1)const常量有数据类型,编译器可对其类型进行安全检查
(2)const常量可进行调试
(3)const可节省空间,避免不必要的内存分配,提高效率
(5)线程和进程调用cpu的方法?

1、先来先服务(FCFS)

最简单的CPU调度算法,根据进程进入就绪队列的先后顺序调度进程执行。但是这种方法的平均等待时间通常较长。

2、最短作业优先调度(SJF)

将每个进程与下一个CPU区间段相关联,当CPU空闲时,他回赋给具有最短CPU区间的进程。如果两个进程具有相同CPU区间长度,可以使用FCFS来调度。这里的CPU区间长度是进程的下一个CPU区间长度,而不是进程的CPU区间总长度。此算法可证明是最佳的,其难点在于如何知道进程的下一个CPU区间的长度。近似的情况下只能通过预测来做。

3、优先级调度

每个进程都有一个优先级相关联,具有最高优先级的进程会被分配到CPU,具有相同优先级的进程根据FCFS顺序调度。实际上短作业优先就是优先级调度算法的一个特例。

优先级调度算法的一个主要问题是导致低优先级的进程产生无穷阻塞或饥饿(可以运行但是缺乏CPU),其解决问题之一就是老化,即以逐渐增加在系统中等待很长时间的进程的优先级。

4、时间片轮转法调度(RR)

为分时系统而设计,类似于FCFS,不过每个进程只分配不超过一个时间片的CPU,对就绪队列中的进程依次循环分配时间执行。

5、多级队列调度

将就绪队列中的进程根据进程的属性不同而永久分配到多个独立的队列中,每个队列都有自己的调度算法。同时队列中也有调度,通常采用固定优先级抢占调度。

6、多级反馈队列调度

跟多级队列调度相似,最大的不同是允许进程在队列之间移动。主要思想是根据不同CPU区间的特点以区分进程,如果进程使用过多CPU时间,那么它会被转移到更低优先级队列。

多级反馈队列调度是最通用的CPU调度算法但是因为要设置很多调度参数,因此也是最复杂的算法。




猜你喜欢

转载自blog.csdn.net/rocky_56x/article/details/79240148
今日推荐