06级系统程序设计(含答案).docx_第1页
06级系统程序设计(含答案).docx_第2页
06级系统程序设计(含答案).docx_第3页
06级系统程序设计(含答案).docx_第4页
06级系统程序设计(含答案).docx_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、简答题1在GCC下,将一个标准C源代码(如:Mycode.c)编译成可执行代码需要哪几个内部过程?预处理PRE-PROCESS, 编译COMPILE, 汇编ASSEMBLY, 链接LINK空间 2 C语言中实现动态内存分配的方法有几种?它们之间的主要差异是什么?2种。堆分配和栈分配。栈分配是在堆栈帧中完成,通过在代码中声明局部变量或使用ALLOCA函数实现,无需手动释放空间,随活动记录一起释放。堆分配是在内存的堆区域中申请空间,一般通过MALLOC()或CALLOC完成,需要手动使用FREE释放这些空间。3. 在IEEE下,从double转换至float过程中,可能会出现什么意外的情况?Float的指数位有8位,底数有23位,double的指数有11位,指数有52位。1. 精度损失。如果指数位的第8位以上均为0,则只会发生精度损失,在转换时原数的底数只能取前23位。2. 溢出。当指数位的第8位以上存在1时,会因指数位过高而发生溢出现象。4. 在计算机逻辑代数中,&、|、&分别表示什么?假设现在有2个整数,分别是:a=0x06, b=0x07, 那么a&b是多少?(a&b)&(a|b)是多少?按位与,按位或,逻辑与。0X06。1.5. 根据所学的知识,有哪3种方法可以量测多任务操作系统中应用程序的性能,各自方法的优缺点是什么?1. 使用计时器函数,可以获得特定段的运行时间,但是需要进行编程。2. 系统工具,可以获得各种时间的比例,但是无法获得具体的各种函数执行时间。3. 使用PROFILLING,可以测量各种函数的调用所占的比例,但需要特定的工具。6. 在自行构建的一个堆的分配器中,需要考虑的四种策略是什么?FREE BLOCK ORGANIZATION,组织策略,对已分配的内存进行跟踪。PLACEMENT,放置策略,选择一个合适的块放置刚刚分配的空间。SPLITTING,分割策略,分配完之后,如何对剩余块进行操作。COALESCING,连结策略,释放块之后,如何将它与邻块连结起来。7. 与传统的单线程设计相比,多线程设计时需要注意哪些问题?采用安全的C函数,对共享成员的访问尽量独立化。8. 如下是Amdahl定律,请给出各中符号的含义,并变换公式说明此定律给我们什么启示?Tnew=1-aTold+(aTold)/kTnewTold=1-(k-1)a/k9. 假设如下代码的,M、N的值够大,为什么说此代码的局部空间性差?(绘图表示)int xMN;int sum=0;for(int i=0;iM;i+)for(int j=0;j100,则i减1void control(int * i)*i*=10;if(*i100) *i-;改为(*i)-;3. 比较字符串void compareString()char p=please come in;char s=Please come in;if(p=s)printf(P is the same as S);elseprintf(P and S are different);If(strcmp(p,s)=0)4. 动态分配void dyProcess()int *p;int size;size=64;p=(int *)malloc(size);for(int i=0;i64;i+) *(p+i)=0;size=64*sizeof(int);5. 初始化一个堆,存放错误信息void my_func(char *msg)/allocate space for a stringchar * full_msg=(char *)malloc(strlen(msg)+100);strcpy(full_msg,The following error was encountered: );strcat(full_msg,msg);if(!display(full_msg) return;.free(full_msg);if(!display(full_msg) free(full_msg);return;三、优化1. 现有如下代码,请照指针地址直接赋值的方法,改写第3行。for(int i=0;i3;i+)for(int j=0;j4;j+)mdij=0;*(md+4*i+j)=0;1. 现有如下代码,请照逻辑操作方式改写第4行的条件比较代码,要求只能用! & |5个操作符中的操作,且总的步数不能超过4步。int test(int x,int y)int i;i=0;if(x=y)i+;return i;!(x&y)2. 现有如下代码,假设采用直接映射缓存结构,块大小为16B,且缓存有2个组构成,共32B的空间,在不考虑变量I、j、sum的情况下。(1) 填写表格中命中(h),和Miss的状态;(2) 计算代码的内存hit率(3) 要想提高hit率,如何改写(4) 计算改写后的hit率。float summary(float a44)float sum=0.0;int i,j;for(i=0;i4;i+)for(j=0;j4;j+)sum+=aij+aji;return sum;i,jaij地址缓存分组aij命中状态aji命中状态0, 000IMMUNEHIT0, 140HITMISS0, 280HITMISS0, 3120MISSMISS1, 0161MISSHIT1 1201HITHIT1, 2241HITMISS1, 3281HITMISS2, 0320HITMISS2 1360MISSMISS2, 2400HITHIT2, 3440HITMISS3, 0481HITMISS3 1521HITMISS3, 2561MISSMISS3, 3601HITHIT(2) Hit=16/32=50%;(3) float summary(float a44)float sum=0.0;int i,j;for(i=0;i4;i+)for(j=0;j4;j+)su

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论