Appearance
题目
某进程的虚拟地址空间布局如下图所示(阴影部分为未占用区域):
图(文字版):从高地址到低地址依次为
- 操作系统内核区(最高)
- 用户栈
- (未占用阴影)
- 共享库的存储映射区
- (未占用阴影)
- 动态生成的堆(运行时由 malloc 创建)
- 读/写数据段
- 只读代码段
- 未使用区(最低)

有 C 程序:
c
char *ptr;
void main() {
int length;
ptr = (char *) malloc(100);
scanf("%s", ptr);
length = strlen(ptr);
printf("length=%d\n", length);
free(ptr);
}请回答:
(1) 上述程序执行时,PCB 位于哪个区域?执行 scanf() 等待键盘输入时,进程处于什么状态?
(2) main() 函数的代码位于哪个区域?其直接调用的哪些函数的功能需要通过执行驱动程序实现?
(3) 变量 ptr 被分配在哪个区域?若变量 length 没有被分配在寄存器中,则会被分配在哪个区域?ptr 指向的字符串位于哪个区域?