动态内存分配

来源:互联网 发布:数据库订单管理系统 编辑:程序博客网 时间:2024/06/06 01:59
什么是系统内存?
答:物理状况是:内存条.

1.栈区—系统自动分配空间即回收空间,——函数体内定义的变量(局部变量)存放在栈区,当出了它所属的函数,系统就把空间回收.
如:在main函数里面定义int a=10;//a存放在栈区,10放在常量区,把常量区的10拷贝一份,放在栈区,即a(10).

栈区存放的是局部变量.


2.堆区—重点:动态内存分布———由用户分配和回收,如果程序员未回收.那么系统内存就会越来越少 ,当内存不够用的时候,程序崩溃.如果没有达到内存的最大值,程序不会崩溃,程序退出时,系统把空间回收.

3.静态区(全局区:存放全局变量的内存空间,),————定义在函数体外面的变量,由系统开辟空间,程序运行过程中一直存在,知道程序退出,由系统回收.
如:属性就是存放在静态区


4.常量区-用于存放常量的内存区域
如10,25,’a’,”helleo”

5.代码区://存放代码编译结果的区域.
我们写的代码是源代码,电脑不识别,需要编译,编译成二进制,二进制存放在代码区.





堆区的内存分配:-----------------------------------重点
malloc分配指定大小的内存空间,但是不会把分配的空间清0


//malloc
void * p=malloc(10);//即向系统申请10个内存空间,返回首地址,p指向这个首地址
//以上就是开辟内存空间,malloc分配指定大小的内存空间,但是不会把分配的空间清0

free(p);//释放内存空间


char * str=malloc(8);
strcpy(str,”iphone”);
pritf(%s,str);
free(str);


?表示以前是什么,还是什么

free为标记删除:不清除内容,只是归还空间(例子:归还房子)

relese:释放内存

例二:
int *p=malloc(4);
*p=30;  //这里的*是取值
pritf:(“%d”,*p);
free(p);








0 0