堆区内存管理

堆区内存管理


堆区内存管理:
内存管理 ==》 每一个进程都有4G的虚拟内存
虚拟内存的划分:
文本区⇒ date段 ⇒ bss段 ⇒ 堆区 ⇒ 栈区 ⇒ OS
内存管理区域: date、bss、堆区、栈区
内存管理方式:申请、释放
静态常量区:申请 程序启动时变量定义
释放 程序结束自动释放
栈区: 申请 在作用范围内的第一次变量申请
释放 作用域结束的位置自动释放
注意:在栈区申请的变量一定要进行初始化,否则可能会存在随机值
堆区:申请 使用malloc函数想系统申请变量空间
释放 使用free函数显示释放
注意:申请和释放必须完整,否则会存在内存泄漏
1、堆区内存申请 ==》 malloc
#include <stdlib.h>
void *malloc(size_t size);
功能:该函数可以从堆区内存申请指定大小的数据块,并返回该内存地址
参数:size 要申请的目标内存大小
返回值:成功 目标内存地址
失败 NULL
2、释放堆区内存 ==》free()
void free(void *ptr);
功能:该函数会释放指定的内存区域
参数: ptr 是malloc返回的地址;
返回值:无

(malloc)堆区内存管理的雷区:
1、申请堆区内存不一定成功
int * pa = (int *)malloc(sizeof(int)*10);
if(pa == NULL)
{
perror(“malloc”) ;
return -1;
}
2、申请的内存不一定干净
bzero(pa,sizeof(int )*10);
memset(pa,0,sizeof(int)*10);
3、访问内存不能越界
手工检查代码;
gdb ,valgrind等工具检测
4、使用完毕必须进行释放,但不能释放多次
free(pa);
5、 释放完毕将指针归零
pa = NULL;

内存检测工具:
valgrind
1、软件安装
1.1 在线安装
sudo apt-get install valgrind
1.2 离线安装
1.2.1 离线软件包安装
dpkg -i valgrind.xxxx.deb
1.2.2 源码包安装
tar -xf valgrind.xxx.tar.bz2
cd ./valgrind
./configure
make
make install
2、软件的使用
balgrind --tool=memcheck ./a.out

perror
#include <stdio.h>
void perror(const char *s);
功能:打印系统默认的标准错误信息
参数:提示信息
返回值:无

malloc函数:分配内存块,但不多内存块进行初始化
calloc函数:分配内存块,并且对内存块进行清空
realloc函数:调整先前分配的内存块

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值