c语言中,内存分为四个区域,代码区,全局区,栈区,堆区。
代码区
我们写的代码会被编译成机器语言存放在这个区域内。
全局区
一般存放的是两种类型的变量:全局变量,静态变量,常量。
特点是由系统分配空间,直到程序结束才释放。
定义在函数体外面的变量是全局变量
int func()
{
}
int a = 0; // 这是一个全局变量
int main()
{
}
static int a; \\ 这是一个静态变量
const int a = 3; //常量
"hello world" // 常量
栈区
由系统自动分配释放,存放函数的参数值,局部变量等等
需要注意的地方
不要返回局部变量的地址
如
int *func()
{
int p = 10;
return *p;
}
int main()
{
int *p = func();
cout << *p; // 错误
}
func() 函数结束后,p指向的地址被释放,p也就成了野指针。这个时候解引用p很危险。
堆区
由程序员分配释放,若不释放,则程序结束后自动释放。
主要针对new和malloc 申请的空间