导航菜单
首页 >  海康考试答案  > 嵌入式笔试(1)

嵌入式笔试(1)

单选(15题) 第一题

在这里插入图片描述

栈简介

栈由操作系统(编译器)自动分配释放 ,用于存放函数的参数值、局部变量等,其操作方式类似于数据结构中的栈。

堆简介

堆由开发人员分配和释放,容易产生内存碎片(不连续的无法利用的地址空间)。 若开发人员不释放,程序结束时由 OS(操作系统) 回收,分配方式类似于链表。

堆与栈区别

堆与栈实际上是操作系统对进程占用的内存空间的两种管理方式,主要有如下几种区别: (1)管理方式不同。栈由操作系统自动分配释放,无需我们手动控制;堆的申请和释放工作由程序员控制,容易产生内存泄漏;

(2)空间大小不同。每个进程拥有的栈的大小要远远小于堆的大小。理论上,程序员可申请的堆大小为虚拟内存的大小,进程栈的大小 64bits 的 Windows 默认 1MB,64bits 的 Linux 默认 10MB;

(3)生长方向不同。堆的生长方向向上,内存地址由低到高;栈的生长方向向下,内存地址由高到低。

(4)分配方式不同。堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是由操作系统完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由操作系统进行释放,无需我们手工实现。

(5)分配效率不同。栈效率高,堆效率低。 栈由系统自动分配,速度较快。但程序员是无法控制。堆分配的内存速度较慢,不易产生内存碎片栈由操作系统自动分配,会在硬件层级对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是由C/C++提供的库函数或运算符来完成申请与管理,实现机制较为复杂,频繁的内存申请容易产生内存碎片。显然,堆的效率比栈要低得多。

(6)存放内容不同。 栈存放的内容,函数返回地址、相关参数、局部变量和寄存器内容等。 堆,一般情况堆顶使用一个字节的空间来存放堆的大小,而堆中具体存放内容是由程序员来填充的。

C程序的存储空间是如何分配 在这里插入图片描述

第二题

在这里插入图片描述

死锁: 在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁,尽管死锁很少发生,但一旦发生就会造成应用的停止响应。 产生死锁的四个必要条件: 1、互斥条件:一个资源每次只能被一个进程使用。 2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。 3、不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。 4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。 预防死锁 1、有序分配锁资源可以预防死锁

2、银行家算法避免死锁(不是检测) 银行家算法是从当前状态出发,逐个按安全序列检查各客户谁能完成其工作,然后假定其完成工作且归还全部贷款,再进而检查下一个能完成工作的客户,…。如果所有客户都能完成工作,则找到一个安全序列,银行家才是安全的。 解除死锁 剥夺死锁进程的所有资源可以解除死锁

第三题(遗失) 第四题

在这里插入图片描述 一、顺序结构(顺序存取和随机存取) 优点 1、简单:存储与管理都简单,且容易实现。 2、支持顺序存取和随机存取。 3、顺序存取速度快。 4、所需的磁盘寻道次数和寻道时间最少。 缺点 1、需要为每个文件预留若干物理块以满足文件增长的部分需要。 2、不利于文件插入和删除。 二、链式结构(顺序存取) 优点 1、提高了磁盘空间利用率,不需要为每个文件预留物理块。 2、有利于文件插入和删除。 3、有利于文件动态扩充。 缺点 1、存取速度慢,不适于随机存取。 2、当物理块间的连接指针出错时,数据丢失。 3、

相关推荐: