HM084 代码区共享且只读

HM084 代码区共享且只读

HM084 代码区共享且只读

来源: 第 84 集 程序的内存模型-内存四区-代码区

难度: 入门

时间限制: 1s

空间限制: 64MB

题目描述

程序里的数据不会混在整条内存里随便放,而是分成四个区域,好让不同数据拥有不同的生命周期,编程更灵活。

四个区域是:

  1. 代码区:你写过的语句、字母、中文注释,最终都会变成 CPU 能执行的二进制机器指令(电脑只认 \(0\) 和 \(1\))放在这里。可执行程序(后缀 .exe)在还没双击运行之前,代码区就已经存在于这个文件中。
  2. 全局区:主要放全局变量、静态变量和常量。
  3. 栈区:局部变量和函数形参。这块内存由**编译器**自动分配和释放,数据的生死不由程序员管。
  4. 堆区:由**程序员**分配和释放。程序结束时如果还没释放,系统会回收,不会永远占着内存。

代码区有两个特点:

  • 共享:同一份程序被多次启动时,不会在内存里复制出多段代码,只保留一份,避免浪费。
  • 只读:运行中不能改机器指令。若代码区可写,就可能把「花 \(10\) 个银币买道具」改成花金币,造成损失。

先把若干条数据归入四区,再回答关于代码区和四区管理的问题。

输入格式

第一行一个整数 \(n\)(\(1 \le n \le 100\))。

接下来 \(n\) 行,每行一个整数 \(t\)(\(1 \le t \le 7\)),表示一条数据:

  1. 一条可执行语句、注释或机器指令
  2. 全局变量
  3. 静态变量
  4. 常量
  5. 局部变量
  6. 函数形参
  7. 程序员用 new 开辟的数据

下一行一个整数 \(q\)(\(1 \le q \le 100\))。

接下来 \(q\) 行,每行一个整数 \(k\)(\(1 \le k \le 8\)):

  1. 代码区是否共享
  2. 代码区是否只读
  3. 代码区在程序运行前还是运行后划分
  4. 多次启动同一程序,代码会复制几份
  5. 代码区存放的是什么
  6. 栈区由谁管理生死
  7. 堆区由谁管理生死
  8. 划分四区是为了让数据拥有不同的什么

输出格式

先输出 \(n\) 行分区名称,再输出 \(q\) 行答案,每行一个词:

  • 分区:代码区 / 全局区 / 栈区 / 堆区
  • \(k=1\):共享;\(k=2\):只读;\(k=3\):运行前;\(k=4\):一份;\(k=5\):机器指令;\(k=6\):编译器;\(k=7\):程序员;\(k=8\):生命周期

行末换行。

样例

输入 #1

5
1
5
6
7
2
4
1
2
3
4

输出 #1

代码区
栈区
栈区
堆区
全局区
共享
只读
运行前
一份

输入 #2

3
3
4
1
4
5
6
7
8

输出 #2

全局区
全局区
代码区
机器指令
编译器
程序员
生命周期

说明

样例 1 把语句归入代码区,局部变量和形参归入栈区,new 的数据归入堆区,全局变量归入全局区;随后确认代码区共享、只读、在运行前划分、多实例只留一份。不要去测指针或 sizeof 的具体字节数。

信息

ID
1083
难度
(无)
分类
(无)
标签
(无)
递交数
0
已通过
0
通过率
?
上传者