摘要:
全局变量放在(数据段);函数内部变量static int ncount放在(数据段),函数内部变量char *p="AAA",p的位置在(堆栈);指向空间的位置是(数据段)。函数内部变量char *p=new char;p的位置是(堆),指向空间的位置是(数据段)堆heap和栈stack的差别是什么?解答:stack的空间由操作系统自动分配/释放,heap上的空间手动分配/释放stack空间有限,heap是很大的自由存储区C中的malloc函数(C++中对应的是new操作符)分配的内存空间即在堆上,程序在编译期间对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时参 阅读全文
摘要:
1.索引器索引器允许类或结构的实例按照与数组相同的方式进行索引。索引器类似于属性,不同之处在于它们的访问器采用参数。它可以像数组那样对对象使用下标。它提供了通过索引方式方便地访问类的数据信息的方法。 要声明类或结构的索引器,使用this关键字。 class SampleCollection { private T[] arr = new T[100]; public T this[int i] { get { return arr[i]; } set ... 阅读全文
摘要:
1.简单工厂模式与工厂模式简单工厂模式举例代码: public abstract class Light { public abstract void TurnOn(); public abstract void TurnOff(); } public class BulbLight : Light { public override void TurnOn() { Console.WriteLine("BulbLight is turned on"); //throw ... 阅读全文
摘要:
1.三范式第一范式:如果关系模式R的每个关系r的属性值都是不可分的原子值,那么称R是第一范式的模式。(例如关系模R(Name,Address,Phone)如果一个人有两个电话号码,那么在关系中至少要出现两个元组,以便存储这两个号码)第二范式: 如果R是1NF,且每个非主属性完全函数依赖于侯选键,那么称R是第二范式(2NF)的模式。(消除局部依赖) 补充:侯选键:某个关系模式的属性集为U,x是U的一个子集.如果x->U在R上成立,那么称x是R的一个超键。如果x->U,但对于x的任一真子集x1都有x1->U不成立,则x是R上的一个候选键。主属性与非主属性:如果A是关系模式R的候选 阅读全文
摘要:
1.CPU中的缓存和操作系统的缓存分别是什么?解答: 1)在操作系统中,为提高系统存取速度,在地址映射机制中增加一个小容量的联想寄存器(相联寄存器),即块表,用来存放当前访问最频繁的少数活动页面的页号。当某用户需要存取数据时,根据数据所在的逻辑页号在块表中找到其对应的内存块号,再联系页内地址,形成物理地址。如果在快表中灭有相应的逻辑页号,则地址映射仍可以通过内存中的也表进行,得到空闲块号后须将该块号填入快表的空闲块中。如果快表中没有空闲块,则根据淘汰算法淘汰某一行,再填入新的页号和块号。快表查找内存块的物理地址消耗的时间大大减低,提高了系统效率。2)高速缓冲存储器(Cache)是位于CPU与内 阅读全文
摘要:
1.同步和异步的区别,什么是进程互斥?解答:操作系统中的进程都是各自独立并以不可预知的速度向前推进,也就是一个进程相对于另一个进程的执行速度是无法确定的,即他们具有异步性。同步是进程间的直接制约关系,这种制约主要源于进程间的合作。进程同步的主要任务就是使并啊执行的个进程之间能有效地共享资源和相互合作,从而在执行时间,执行次序上相互制约,按照一定的协议协调执行,使程序的执行具有可再现性。进程互斥是进程间的间接制约关系,当多个进程需要使用相同的资源,而此类资源在任一时刻却只能供一个进程使用,获得资源的进程可以继续执行,没有获得资源的进程必须等待,进程的运行具有时间次序的特征,谁先从系统获得共享资源 阅读全文
摘要:
1.什么是线程,并比较它与进程的异同?解答: 传统的进程有两个基本属性:1)可拥有资源的独立单位;2)能够进行处理器调度和分配的基本单位。引入线程后,将其两个属性分开。线程作为处理器调度和运行的基本单位。进程作为分配资源的基本单位,可以通过创建线程来完成任务,以减少程序并发执行时付出的时空开销。同:都可以并发执行,都有就绪,执行,阻塞这些基本状态,也都可以在这些基本状态之间转换状态;从创建到撤销有一定的生命周期;都需要同步工具。异:1)并发粒度不同;2)拥有资源数量不同。3)管理开销不同,这是由2)可以看出的。2.说明时间片轮转调度算法的基本思想解答:在采用时间片轮转调度算法中,将系统中所有就 阅读全文
摘要:
1.中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展--让标准C支持中断。其代表事实是,产生了一个新的关键字_interrupt.请看下面的程序(一个中断服务子程序ISR),请指出这段代码的错误 interrupt double comput_area(double radius){ double area=PI*radius*radius; printf("\nArea=%f",area); return area;}解答:1)ISR不能返回一个值。2)ISR不能传递参数。3)在许多处理器中,浮点一般都是不可重入的2.在嵌入式系统中,我们经常使用”vo 阅读全文
摘要:
1,求下列程序的输出结果:#includeint main(){ printf("%f\n",5); printf("%d\n",5.01);}分析:首先参数5是int型,32位平台中为4字节,因此在stack中分配4字节的内存,用于存放参数5.然而printf根据说明符“%f”,认为参数应该是个double型(在printf函数中,float会自动转换成double),因此从stack中读了8个字节。很显然,内存访问越界。如果printf或者scanf中指定了"%f",那么在后面的参数列表中也应该指定一个浮点数,或者指向浮点数变量的 阅读全文
摘要:
一:什么是多态? 简单来说多态是“一个接口,多种方法”。(不同对象收到相同的消息时,产生不同的动作)。从实现角度来讲,多态可以划分为两类:编译时的多态(通过静态连编实现,主要通过函数重载和运算符重载实现)和运行时的多态(通过动态连编实现,主要通过虚函数实现)。二:重载和覆盖有什么不同?虚函数总是在派生类中被改写,这种改写被称为“Override”(覆盖)。它是指派生类重写基类的虚函数,重写的函数必须有一致的参数表和返回值。Overload被称为“重载”,是指编写一个与已有函数同名但是参数表不同的函数。函数重载是编译时的多态。#includeusing namespace std;class B 阅读全文