内存管理小结

本文详细介绍了程序运行过程中涉及的不同内存区域及其用途,包括栈区、堆区、静态区和程序代码区等。栈区用于存放函数参数和局部变量;堆区用于动态分配内存;静态区用于存放全局变量和静态变量;程序代码区则存放函数体的二进制代码。




栈区(可读可写):

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

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;
}

输出结果为



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值