申请的内存空间已经手动释放了,进程占用内存仍没有下降

前几天同事遇到一个问题,程序启动加载所有的功能模块,后续通过接口调用卸载了一些功能模块,但是在资源占用测试时,发现卸载前后比较,只有cpu使用率下降了,但是内存占用没有下降,这比较奇怪,卸载模块时明明已经free掉了申请的内存的啊,可是内存占用还是没有下降喃?于是我开始去搜索了相关的问题,发现果然大有门道啊。

虚拟内存空间

先说说虚拟内存,虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同位数的处理器,地址空间的范围也不同。以32位处理器为例,如下如所示:
在这里插入图片描述

在用户空间,从高到低分别为

  • 栈,主要为局部变量,大小一般固定为8MB
  • 文件映射段,主要为动态库、共享内存等
  • 堆,主要为动态分配的内存,从低地址往高地址增长
  • 数据段,主要为全局变量
  • 只读段,主要为常量和代码

malloc对应的系统调用

在我们使用malloc在堆中动态分配内存时,实际上会设计到两种系统调用,分别为brk和mmap
这两种系统调用是有区别的:

brk

当我们申请的内存大小小于128k时,标准库会调用brk来分配,它是将堆顶移动的方式进行的。如下如所示:
在这里插入图片描述

mmap

而申请的内存大小大于128k时,会调用mmap内存映射来分配,即在文件映射段找一块空闲的内存进行分配。如下如所示:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值