A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© runsunlife 中级黑马   /  2015-8-19 15:52  /  377 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

内存分为5大区域 
栈区 -- 存放局部变量,临时变量 
堆区 -- 程序运行过程中,动态分配的内存 
BSS区 -- 未初始化的全局变量和静态变量 
数据段 -- 已经初始化的全局变量和静态变量 
代码段 -- 程序编译产生的二进制的数据 
 
 动态内存管理 
1) malloc 
(void *)malloc(n) //动态的向内存申请连续的n个字节 返回的是新申请的内存空间的首地址 
int *p = (int *)malloc(100); //p是在栈区 malloc(100) 在堆区 
malloc不会把新申请的空间初始化 
memset(p,0,100); //全部初始化为0 
 
2) calloc 
int *p = (int *)calloc(5,4); //申请5个长度为4的空间 
calloc可以把新申请的空间初始化0 
注意:判断一个空间是否申请成功 
if(p!=NULL){ //只有申请成功了,才能操作 

 
3) realloc 
重新改变一块内存空间的大小 p = (int *)realloc(p,size); 
 
4) free 
释放我们指定的内存空间 
free(p); //p是我们新申请的内存单元 free后,p是一个野指针 
如果不释放,造成内存的泄露 

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马