c 程序占用的内存:
举例说明:
int a = 1; // 属于全局变量,存放在全局区;
char *p; // 属于全局变量,存放在全局区;
main{
int b; // 属于局部变量,存放在栈区;
char*p1; // 属于局部变量,存放在栈区;
char s[ ] = “123”; // 属于局部变量,存放在栈区;
char *p3 = “456”; // p3属于局部变量,存放在栈区;而怕p3所指的对象在文字常量区
Static int c = 1; // 属于静态变量,存放在全局(静态)区
p = (char*)malloc(100);
p1 = (char*)malloc(200); // p和p1在栈区,分配得到的100和200字节的区域在堆区
}
| 函数名 | 作用 | 优缺点 |
|---|---|---|
| Malloc | 分配指定字节数的存储区 | |
| calloc | 为指定对象分配指定空间 | |
| realloc | 更改以前分配区的大小 | |
| alloca | 在栈帧上分配存储空间 | 函数返回时自动释放空间 |
实现跳转功能的函数 setjmp、longjmp
int setjmp (jmp_buf env);
void longjmp (jmp_buf env, int val);
参数 env 是一个特殊类型的 jmp_buf,这种数据类型是某种形式的数组,存放着调用 longjmp 时能用来恢复栈状态的所有信息,一般 env 是全局变量,因为需要从别的函数中引用。
注意:在调用这两个函数时,要先调用 setjmp 函数,再调用 longjmp 函数,否则 longjmp 读到的 env 不确定,会造成系统的崩溃。

