免费智能真题库 > 历年试卷 > 嵌入式系统设计师 > 2021年上半年 嵌入式系统设计师 上午试卷 综合知识
  第27题      
  知识点:   存储管理   分页
  关键词:   存储管理        章/节:   嵌入式系统程序设计       

 
存储管理中一般用分段和分页机制实现地址转换,下面描述不正确的是()。
 
 
  A.  分段支持较大且大小可变的内存区域
 
  B.  分页支持较小且大小相等的内存区域
 
  C.  分段机制不可能产生碎片
 
  D.  段页式将每个段分成页,且把地址转换分为段地址转换和页地址转换两步
 
 
 

 
  第20题    2009年下半年  
   53%
以下关于C/C++语言指针变量的叙述中,正确的是(20)
  第49题    2018年下半年  
   44%
运行时的存储分配策略,在程序设计语言的处理系统中非常重要。C语言中,全局变量和静态变量采用(49)方式分配存储资源。
  第17题    2020年下半年  
   40%
在常见的数据结构中,(16)是只能通过访问它的一端来实现数据存储和检索的一种线性数据结构,它的修改遵循先进后出的原则;(17)..
   知识点讲解    
   · 存储管理    · 分页
 
       存储管理
        C程序中经常需要使用各种变量,如全局变量、静态变量、局部变量,编程时需要了解这些变量的作用域及其所占用的存储位置及存储空间大小,包括静态存储和动态存储的概念。若程序中的一个变量在运行时总是不正常地被改变,那么有理由怀疑它临近的数据存在溢出情况,从而改变了这个变量值。要进行跟踪排查,就必须知道该变量被分配的位置及其附近的其他变量。
        程序的编译单位是源程序文件,一个源文件可以包含一个或若干个函数。在函数内定义的变量是局部变量,而在函数之外定义的变量则称为外部变量,外部变量也就是通常所说的全局变量。
        例如,在下面的程序段中,有全局变量degree、cnt和局部变量times、price。
        
               内存布局
               一个C程序在不同的系统中运行时,虽然对其代码和数据所占用的内存空间会有不同的布局和安排,但是一般都包括正文段(包含代码和只读数据)、数据区、堆和栈等。例如,在Linux系统中进程的内存布局示意图如下图所示。
               
               程序的内存映像示意图
               (1)正文段中主要包括由CPU执行的机器指令,该存储区是只读区域,以防止程序由于意外事件而修改,该段也是可共享的,因此经常执行的程序在存储器中只需要有一个副本。
               (2)数据区(段)分为初始化部分和未初始化部分,在程序中已初始化的全局变量和静态局部变量的存储单元在该区域。还有程序中未初始化的全局数据所占存储区域,常称为BSS段(来源于早期汇编程序的一个操作,即Block Started by Symbol),在程序开始执行之前,内核将此段初始化为0。
               (3)栈是局部变量以及每次函数调用时所需保存的信息的存储区域,其空间的分配和释放由操作系统进行管理。每次函数调用时,其返回地址以及调用者的环境信息(例如某些寄存器)都存放在栈中。然后,在栈中为新被调用的函数的自动和临时变量分配存储空间。栈空间向低地址方向增长。
               (4)堆是一块动态存储区域,由程序员堆分配和释放,若程序员不释放,则程序结束时由操作系统回收。堆空间地址的增长方向是从低地址向高地址。在C程序中,通过调用标准库函数malloc/calloc/realloc等向系统动态地申请堆存储空间来存储相应规模的数据,之后用free函数释放所申请到的存储空间。
               当程序使用这些函数去获得新的内存空间时,系统首先在堆上进行内存空间的分配,操作系统一般需要维护一个记录空闲内存地址的链表。当系统收到程序的申请时,会遍历该链表,寻找适用于所申请空间大小的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给用户程序。另外,对于大多数系统,会在这块内存空间中的首地址处记录本次分配的大小,这样,代码中的free操作才能正确地释放本段内存空间。由于找到的堆结点大小不一定正好等于申请空间的大小,因此涉及到复杂的分配机制,需要进行系统调用,可能产生内存碎片以及用户态与核心态的转换等一系列问题。
               对于内存受限的系统,应尽量避免使用动态内存分配,多采用静态内存分配,从而在程序编译时就能确定其运行时所需要的存储空间。
               大端模式和小端模式
               在计算机系统中是以字节为单位存储信息的,每个地址单元都对应着一个字节(8bit)。但是在C程序中除了8bit的char型数据外,还有16bit的short型、32bit的int型及long型(要看具体的编译器)。另外,对于16位或者32位的处理器,由于寄存器宽度为多个字节,那么必然存在着如何将多个字节安排的问题。因此就导致了大端(Big-endian)存储模式和小端(Little-endian)存储模式。
               大端模式就是高位字节存储在内存的低地址端,低位字节存储在内存的高地址端。
               小端模式就是低位字节存储在内存的低地址端,高位字节存储在内存的高地址端。
               常用CPU中的PowerPC、IBM、Sun、KEIL C51采用大端模式,X86、DEC采用小端模式,很多ARM、DSP为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。
               一般操作系统是小端模式,而通信协议是大端模式。另外,Java和所有的网络通信协议都是使用大端模式的编码。
               例如,对于一个32bit的十六进制整数0x12345678,在Little-endian模式以及Big-endian模式内存中的存储方式(假设从地址0x4000开始存放)如下表所示。
               
               大端模式和小端模式存储示例
 
       分页
        Word是通过分页符决定文档分页的位置,也就是说,分页符用来表示上一页结束、下一页开始的位置。分页有自动分页和人工分页两种,自动分页是指文档中每个页面结尾处Word自动插入的分页符,该分页符也称为软分页符;人工分页是指通过Word提供的插入分页符命令,在指定位置上强制插入的分页符,该分页符也称为硬分页符。
        在页面视图、打印预览以及在打印出的文档中,分页符后的文本出现在新页中。在普通视图中,自动分页符显示为横穿页面的单点划线;人工分页符则显示为标有“分页符”字样的单点划线,如下图(a)所示。
        
        设置分页
        插入人工分页符的方法是单击新页的起始位置,选择“插入”→“分隔符”命令,打开“分隔符”对话框,如上图(b)所示。选择“分页符”单选按钮,单击“确定”按钮关闭对话框。
        删除分页符的方法是在普通视图下,先将光标移到分页符的单点划线中,按Delete键。
   题号导航      2021年上半年 嵌入式系统设计师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第27题    在手机中做本题