堆区内存管理

堆区内存管理


堆区内存管理:
内存管理 ==》 每一个进程都有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函数:调整先前分配的内存块

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux堆内存管理原理是指Linux操作系统中对堆内存的分配和释放的管理机制。堆内存是指程序运行时动态分配的内存空间,其大小和位置在程序运行时才能确定。Linux堆内存管理原理主要包括以下几个方面: 1. 堆内存的分配:Linux使用malloc()和calloc()函数来分配堆内存。这些函数会在堆内存中找到一块足够大的空闲内存,并将其分配给程序使用。 2. 堆内存的释放:程序使用完堆内存后,需要使用free()函数将其释放。释放后的堆内存会被标记为空闲状态,可以被其他程序使用。 3. 堆内存的管理:Linux使用堆管理器来管理堆内存。堆管理器会维护一个堆内存的空闲链表,记录哪些内存块是空闲的。当程序请求分配堆内存时,堆管理器会在空闲链表中查找足够大的内存块,并将其分配给程序使用。当程序释放堆内存时,堆管理器会将其标记为空闲状态,并将其加入空闲链表中。 4. 堆内存的碎片化:堆内存的分配和释放会导致堆内存的碎片化。当程序请求分配堆内存时,堆管理器会在空闲链表中查找足够大的内存块。如果没有足够大的内存块,堆管理器会将多个小的空闲内存块合并成一个大的内存块。但是,当程序释放堆内存时,可能会留下一些小的空闲内存块,导致堆内存的碎片化。为了避免堆内存的碎片化,可以使用内存池等技术来管理堆内存

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值