内存管理小结




栈区(可读可写):

编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 
例:

int main()
{
    char a;//局部变量,在栈中
    char *p;//局部变量,在栈中
    return 0;
}


堆区间(可读可写):在运行的时候调用程序(如C中的malloc或C++中的new)分配内存,可以在任何时候决定分配内存及分配的大小,用户自己负责在何时释放内存(如用free或delete)。堆中的所有东西都是匿名的,这样不能按名字访问,而只能通过指针访问。
例:

#include<stdlib.h>

int main()
{
  char *p=(char *)malloc(4);//p指向的四个字节的内存在堆区间中
  return 0;
}


静态区:内存在程序启动的时候才被分配,而且可能直到程序开始执行的时候才被初始化,如函数中的静态变量就是在程序第一次执行到定义该变量的代码时才被初始化。所分配的内存在程序的整个运行期间都存在,如全局变量,static变量等
例:

#include<stdlib.h>

int a;//a是一个全局变量
int b;//b是一个静态全局变量,作用范围只限在本文件中
int main()
{
  static int c;//c是一个静态局部变量
  return 0;
}


程序代码区(只读)

存放函数体的二进制代码


文字常量区(只读)

相同内容字符串储存在同一个区间

例:

#include<stdio.h>
#include<windows.h>

int main()
{
	char *p1 = "abcd";
	char *p2 = "abcd";
	printf("%p\n",p1);
	printf("%p\n",p2);
	system("pause");
	return 0;
}

输出结果为



猜你喜欢

转载自blog.csdn.net/qq1910084514/article/details/80505258