HM084 代码区共享且只读
HM084 代码区共享且只读
来源: 第 84 集 程序的内存模型-内存四区-代码区
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
程序里的数据不会混在整条内存里随便放,而是分成四个区域,好让不同数据拥有不同的生命周期,编程更灵活。
四个区域是:
- 代码区:你写过的语句、字母、中文注释,最终都会变成 CPU 能执行的二进制机器指令(电脑只认 \(0\) 和 \(1\))放在这里。可执行程序(后缀
.exe)在还没双击运行之前,代码区就已经存在于这个文件中。 - 全局区:主要放全局变量、静态变量和常量。
- 栈区:局部变量和函数形参。这块内存由**编译器**自动分配和释放,数据的生死不由程序员管。
- 堆区:由**程序员**分配和释放。程序结束时如果还没释放,系统会回收,不会永远占着内存。
代码区有两个特点:
- 共享:同一份程序被多次启动时,不会在内存里复制出多段代码,只保留一份,避免浪费。
- 只读:运行中不能改机器指令。若代码区可写,就可能把「花 \(10\) 个银币买道具」改成花金币,造成损失。
先把若干条数据归入四区,再回答关于代码区和四区管理的问题。
输入格式
第一行一个整数 \(n\)(\(1 \le n \le 100\))。
接下来 \(n\) 行,每行一个整数 \(t\)(\(1 \le t \le 7\)),表示一条数据:
- 一条可执行语句、注释或机器指令
- 全局变量
- 静态变量
- 常量
- 局部变量
- 函数形参
- 程序员用
new开辟的数据
下一行一个整数 \(q\)(\(1 \le q \le 100\))。
接下来 \(q\) 行,每行一个整数 \(k\)(\(1 \le k \le 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
- 通过率
- ?
- 上传者