Dotcpp   >   考研真题   >   题目 7695

(本题 8 分)某系统中进程的虚拟地址空间包括内核区、用户栈、运行时堆、可读写数据段、只读代码段等区域,其布局如图所示,图中阴影部分表示未占用区域。现有 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)上述程序执行时,其进程控制块位于哪个区域?执行 scanf () 等待键盘输入时,该进程处于什么状态?(2 分)(2)main () 函数的代码位于哪个区域?其直接调用的哪些函数的功能需要通过执行驱动程序实现?(3 分)(3)变量 ptr 被分配在哪个区域?若变量 length 没有被分配在寄存器中,则会被分配在哪个区域?ptr 指向的字符串位于哪个区域?(3 分)

(本题 8 分)某系统中进程的虚拟地址空间包括内核区、用户栈、运行时堆、可读写数据段、只读代码段等区域,其布局如图所示,图中阴影部分表示未占用区域。现有 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)上述程序执行时,其进程控制块位于哪个区域?执行 scanf () 等待键盘输入时,该进程处于什么状态?(2 分)

(2)main () 函数的代码位于哪个区域?其直接调用的哪些函数的功能需要通过执行驱动程序实现?(3 分)

(3)变量 ptr 被分配在哪个区域?若变量 length 没有被分配在寄存器中,则会被分配在哪个区域?ptr 指向的字符串位于哪个区域?(3 分)


答案

(1)进程控制块位于内核区;该进程处于阻塞态。

(2)main () 函数的代码位于只读代码段;scanf () 和 printf () 的功能需要通过执行驱动程序实现。

(3)ptr 被分配在可读写数据段中;length 会被分配在用户栈中;ptr 指向的字符串位于运行时堆中。

题目信息

题号:7695
题型:简答题
知识点:考研真题
难度:普通
0.062258s