定了个小计划,大概能2-3天看一章并做习题,这套书感觉也可能不会看完,实在太多了,看了1本之后估计后面当手册翻翻
这章环境那一些看的不太懂2333
6-1
编译程序清单6-1中的程序,使用ls -l命令显示可执行文件的大小,解释为什么可执行文件的大小远小于10MB,但是程序中包含了一个10MB的数组?
1 |
|
编译后占用体积的部分主要是
char globBuf[65536];
至于
static int key = 9973;
static char mbuf[10240000];
未初始化的部分不分配空间,后面等程序加载器分配
6-2
编写程序,观察longjmp函数试图跳转到一个已经返回的函数中会出现什么。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
jmp_buf env;
void x()
{
if (setjmp(env) == 0)
{
printf("1\n");
}
else
{
printf("2\n");
}
}
void y()
{
longjmp(env, 1);
printf("3\n");
}
int main(void)
{
x();
y();
printf("4\n");
return 0;
}
出现
1
2
4
原因书上有解释,尝试返回一个释放了的栈帧.
这个题按着书上 滥用longjmp()部分写就可以了
6-3
使用getenv()函数,putenv()函数来实现setenv()和unsetenv()函数。unsetenv函数需要将多个同名的环境变量都移除。