该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
程序的可用内存有三种:静态存储区、栈存储区、堆存储区。静态存储区是全部变量和static变量占据的,在程序开始运行之前就分配好了,它们从不释放;栈存储区在函数调用前分配,函数调用返回时释放;而堆存储区的分配释放完全在程序员手中,你用malloc/free进行分配与释放。
每个变量都要有它的内存分配,如:
static int global_var;
即是在静态存储区分配一个整型变量;而
void func(void)
{
char local_var;
...
}
则是在栈存储区分配一个字符变量。
结构体并没有什么不同,设有结构体定义:
struct stu
{
char sex;
long num;
};
则下面的定义:
static struct stu a;
将在静态存储区分配一个结构体变量,大小为sizeof(struct stu);同样地,
void func(void)
{
struct stu b;
...
}
则是在栈存储区分配一个结构变量,大小也为sizeof(struct stu)。
对于指针,情况有些微妙,难以理解。指针变量本身,它也可以有上面三指分配:如
static char *c;
在静态存储区