HM085 全局区里有谁

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\)):

  1. 全局变量
  2. 静态变量
  3. 字符串常量
  4. const 修饰的全局变量
  5. 局部变量
  6. 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
通过率
?
上传者