mooc计算机系统原理链接 第十一周小测验

第十一周小测验
笔记格式比较好看:
文档:第十一周小测验.note
链接:http://note.youdao.com/noteshare?id=934ece27a09fceaa4022eb7b06a556bc

声明 : 没有特殊说明,写的解析都是自己猜测的,不一定正确. 有些解析是mooc自带的,写的比较正规 应该可以看出来,我自己写的注释就像草稿一样
返回
已经超过规定的测试次数或提交截止时间已过。你可以作为自我学习进行测验,但提交的结果将无法获得学分。
1
单选(0.5分)
以下是链接过程中对符号定义的判断,其中错误的是( )。
得分/总分
A.
全局变量声明“int *xp=&x;”中,xp和x都是符号的定义
0.50/0.50
B.
静态局部变量声明“static int x=*xp;”中,x是符号的定义
C.
函数内的局部变量声明“short x=200;”中,x不是符号的定义
D.
全局变量声明“int x, y;”中,x和y都是符号的定义
&x; 引用
正确答案:A你选对了
2
单选(0.5分)
若x为局部变量,xp、y和z是全局变量,则以下判断中错误的是( )。
得分/总分
A.
静态局部变量声明“static int x=*xp;”中,xp是符号的引用
B.
赋值语句“y=x+*xp;”中,y和xp都是符号的引用
C.
赋值语句“int y=x+z;”中,y和z都是符号的引用
int y 定义
D.
赋值语句“y=x+z;”中,y和z都是符号的引用
正确答案:C你没选择任何选项
3
单选(0.5分)
以下有关ELF目标文件的符号表的叙述中,错误的是( )。
得分/总分
A.
符号表定义在.symtab节中,每个表项描述某个符号的相应信息
B.
可重定位和可执行两种目标文件中都有符号表且数据结构一样
C.
符号表中包含了所有定义符号的描述信息,包括局部变量的相关信息
局部变量 这是栈里的
D.
通过符号表可获得符号的名称、所在节及在节中偏移地址和长度
正确答案:C你没选择任何选项
4
单选(0.5分)
以下是有关链接过程中符号解析(符号绑定)的叙述,其中错误的是( )。
得分/总分
A.
同一个符号名可能在多个模块中有定义,每个定义处的符号都须分配空间
B.
本地符号的解析比较简单,只要与本模块内定义的符号关联即可
C.
符号解析的目的是将符号引用与某目标模块中定义的符号建立关联
D.
全局符号(包括外部全局符号)需将模块内的引用与模块外的定义符号绑定
正确答案:A你没选择任何选项
5
单选(0.5分)
以下有关强符号和弱符号的符号解析的叙述中,错误的是( )。
得分/总分
A.
一个符号名可以有多个弱符号,任选一个为其定义
B.
一个符号名只能有一个强符号,否则符号解析失败
C.
一个符号名可以仅出现在引用处或仅出现在定义处

不知道什么意思 可能是说没定义不能引用吧

D.
一个符号名可以有一个强符号和多个弱符号,强符号为其定义
正确答案:C你没选择任何选项
6
单选(0.5分)
以下是两个源程序文件:

/* m1.c */                                                        /* m2.c */
        int p1(viod);                                               static int main=1;
int main()                                                        int p1()
        {
    
                                                                          {
    
    
                int p1= p1();                                                    main++;
                return p1;                                                        return main;
}                                                                      }

对于上述两个源程序文件链接时的符号解析,错误的是( )。
得分/总分
A.
在m2中,定义了一个强符号p1和一个局部符号main
B.
因为出现了两个强符号main,所以会发生链接错误
//函数和变量的名字都是符号 一样的话也会报错的,但是static的就没事
C.
在m1中,定义了一个强符号main和一个弱符号p1
D.
在m1中,对m2中定义的强符号p1的引用只有一处
正确答案:B你没选择任何选项
7
单选(0.5分)
以下是两个源程序文件:
/* m1.c / / m2.c /
int p1; int main=1;
int main() int p1()
{ {
int p1= p1(); int p1=main++;
return p1; return main;
} }
对于上述两个源程序文件链接时的符号解析,错误的是( )。
得分/总分
A.
在模块m1的所有语句中,对符号p1的引用一共有三处
一处p1(); 其他都不是… /// int p1; 不是
B.
在m2中,定义了一个强符号p1和一个强符号main
C.
因为出现了两个强符号main,所以会发生链接错误
D.
在m1中,定义了一个强符号main和一个弱符号p1
正确答案:A你没选择任何选项
8
单选(0.5分)
以下是两个源程序文件:
/
m1.c / / m2.c /
int x=100; float x;
int p1(viod); static main=1;
int main() int p1()
{ {
x= p1(); int p1=main + (int) x;
return x; return p1;
} }
对于上述两个源程序文件链接时的符号解析,错误的是( )。
得分/总分
A.
m1中对x的两处引用都与m1中对x的定义绑定
B.
m2中对x的引用与m2中对x的定义绑定
C.
虽然x、main和p1都出现了多次定义,但不会发生链接错误
D.
m2中的变量p1与函数p1被分配在不同存储区
正确答案:B你没选择任何选项
9
单选(0.5分)
以下是两个源程序文件:
/
m1.c / / m2.c */
#include <stdio.h>
int x=100; double x;
short y=1, z=2;
int main() void p1()
{ {
p1(); x= -1.0;
printf(“x=%d, z=%d\n”, x, z); }
}
上述程序执行的结果是( )。提示:1074790400=230+220,16400=214+24。
得分/总分
A.
x=0, z=-16400
B.
x=-1074790400, z=0
C.
x=100, z=2
D.
x=-1, z=2
正确答案:A你没选择任何选项
这是老师的正规解析
解析: A、该题中变量x在m1.c中为强符号,在m2.c中为弱符号。在调用p1函数后,x处原来存放的100被替换,-1.0的double类型表示为1 0111 1111 111 00…0,十六进制表示为BFF0 0000 0000 0000。因为x、y和z都是初始化变量,同在.data节中,链接后空间被分配在一起,x占4B,随后y和z各占2B。因为IA-32为小端方式,所以,x的机器数为全0,y的机器数也为全0,z的机器数为BFF0H。执行printf函数后x=0, z=-(214+24)=-16400。
10
单选(0.5分)
假设调用关系如下:func.o→libx.a和liby.a中的函数,libx.a→libz.a中的函数,libx.a和liby.a之间、liby.a和libz.a相互独立,则以下几个命令行中,静态链接发生错误的命令是( )。
得分/总分
A.
gcc -static –o myfunc func.o libx.a libz.a liby.a
B.
gcc -static –o myfunc func.o liby.a libz.a libx.a
libx.a→libz.a中的函数 但是x在z后面 不行的
C.
gcc -static –o myfunc func.o libx.a liby.a libz.a
D.
gcc -static –o myfunc func.o liby.a libx.a libz.a
正确答案:B你没选择任何选项

猜你喜欢

转载自blog.csdn.net/jonathan_joestar/article/details/112548044