C语言基础学习笔记——内存管理(malloc/free)

程序的内存区域分为:
代码区:存放程序代码和各个函数
数据区:存放程序中的全局变量和静态变量、常量
栈区(stack):存放局部变量、形参等,内存空间很小,由系统管理。
堆区(heap):存放动态数据,需要使用指针访问。动态内存分配,内存空间很大,由用户自己管理。

局部变量:也称为内部变量,只能在定义它的函数内部使用,不能被该函数外的代码使用,函数调用结束后,局部变量所占用的内存会自动释放,局部变量应尽量定义在程序块的开头。
全局变量:全局变量对于整个程序块都是可见的,它不属于某个函数,而是属于整个源文件,一般在main函数之前声明全局变量。在全局变量定义之后的所有函数都能使用它,如果不初始化,系统会自动初始化为0。

静态局部变量:局部变量之前加上static关键字,比如:static int a;
只会被初始化一次,在第一次进入函数时创建,退出函数时值会保留下来,不会立即被释放掉。如果用static修饰全局变量,会限定全局变量的使用范围在当前源文件内,在后面声明的全局变量如果想在之前的函数里使用,可以用extern在最前面作前置声明为全局变量。

const关键字:const修饰函数参数时,表示函数内部不能对函数参数进行修改(把内存声明为只读属性),所以使用const修饰变量时,必须初始化,否则无意义。

静态内存分配:编译器在处理程序源代码时(编译)进行内存分配。
动态内存分配:程序执行(运行)时按动态要求进行内存分配。
注:静态内存分配是在程序执行之前(编译时)进行的,因而效率比较高,但缺少灵活性,要求在程序执行之前就要知道所需内存的类型和大小;静态对象的分配和释放由编译器自动处理;动态内存的分配和释放由程序员显示的管理。

动态内存分配:
C语言中动态内存的分配就是使用一个标准的库函数malloc在堆区申请内存,malloc会自动在堆里寻找合适大小的内存并返回。

(int *)malloc (4);							//动态分配4个字节,并且把分配的内存首地址返回
int *PInt = (int *)malloc(sizeof(int));		//分配一个整型变量
char *PCh=(char *)malloc(sizeof(char));		//分配一个字符变量
char *PArray=(char *)malloc(sizeof(char)*10);//分配10个长度的字符数组
double* PDouble=(double *)malloc(sizeof(double));//分配一个double类型变量

动态内存的使用:只能使用指针访问,因为没有变量名

*PInt =9;
*PCh='A';
*PDouble=1.1;
for(int i=0;i<10;i++)
{
	PArray[i]='a'+i;
}
for(int i=0;i<10;i++)
{
	printf("*(PArray+%d)=%c\n",i,*(PArray+i));		//利用指针访问
}

释放内存:

free(PInt);
free(PCh);
free(PArray);
free(PDouble);
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值