HM085 全局区里有谁
HM085 全局区里有谁
来源: 第 85 集 程序的内存模型-内存四区-全局区
难度: 入门
时间限制: 1s
空间限制: 64MB
题目描述
程序编译成可执行文件之后、还没开始运行时,内存里已经划出两个区:代码区和**全局区**。全局区里放三类东西:
- 全局变量:写在函数外面的变量,例如
int gA; - 静态变量:在普通变量前面加上关键字
static,例如static int sA = 10; - 常量:全局区还包含常量区。字符串常量(如
"hello world")以及const修饰的**全局**变量都在这里。
这块区域的数据在**整个程序结束之后**才由**操作系统**释放,不会因为某一个函数执行完就消失。
容易混的是 const:
const修饰的全局变量(可记作c_g,c 表示 const,g 表示 global)在全局区;const修饰的局部变量,也叫局部常量(可记作c_l,l 表示 local),和普通局部变量在一起,**不在全局区**。
对比地址时可以看到:局部变量和局部常量的地址挤在一堆,全局变量、静态变量、字符串常量、全局常量的地址挤在另一堆。本题不要求输出具体地址(不同机器上的数字不一样),只根据种类判断在不在全局区,以及两种数据是否同一类区域。
输入格式
第一行一个整数 \(n\)(\(1 \le n \le 100\))。
接下来 \(n\) 行,每行一个整数 \(t\)(\(1 \le t \le 6\)):
- 全局变量
- 静态变量
- 字符串常量
const修饰的全局变量- 局部变量
const修饰的局部变量(局部常量)
下一行一个整数 \(q\)(\(1 \le q \le 100\))。
接下来 \(q\) 行:
1:全局区是在程序运行前还是运行后划分。2:全局区数据在程序结束后由谁释放。3:普通变量前面加什么关键字变成静态变量。4:局部常量是否在全局区。5\ u\ v:种类 \(u\) 与 \(v\) 是否属于同一类区域(都在全局区,或都不在)。
输出格式
先输出 \(n\) 行:全局区 或 非全局区。
再按询问输出 \(q\) 行:
- \(1\):
运行前 - \(2\):
操作系统 - \(3\):
static - \(4\):
否 - \(5\):
相同或不同
行末换行。
样例
输入 #1
6
1
2
3
4
5
6
4
1
2
3
4
输出 #1
全局区
全局区
全局区
全局区
非全局区
非全局区
运行前
操作系统
static
否
输入 #2
2
2
6
2
5 1 2
5 5 6
输出 #2
全局区
非全局区
相同
相同
说明
样例 1:全局、静态、字符串常量、全局 const 在全局区;普通局部和局部 const 不在。全局区运行前就有,程序结束后由操作系统释放;static 把普通变量变成静态变量。样例 2 中静态与全局同类,两个局部(含局部常量)也同类。不要输出或比较具体的地址数字。
信息
- ID
- 1084
- 难度
- (无)
- 分类
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 通过率
- ?
- 上传者