加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Mmap和valgrind,mmap不会增加堆大小

发布时间:2020-12-16 09:56:14 所属栏目:百科 来源:网络整理
导读:我正在参加我大学的操作系统课程,我们给出的任务之一是使用mmap实现简单的malloc.现在,我得到它的工作,我试图使用valgrind来检测任何错误.无论是否释放内存,valgrind都没有看到任何内存泄漏.作为示例,请考虑以下C代码: int main(){ int psize = getpagesize
我正在参加我大学的操作系统课程,我们给出的任务之一是使用mmap实现简单的malloc.现在,我得到它的工作,我试图使用valgrind来检测任何错误.无论是否释放内存,valgrind都没有看到任何内存泄漏.作为示例,请考虑以下C代码:

int main()
{
    int psize = getpagesize(),i;
    int *ptr = mmap(NULL,psize,PROT_WRITE | PROT_READ,MAP_ANONYMOUS | MAP_PRIVATE,-1,0);
    for(i = 0; i < psize/4; i++) ptr[i] = i;
    for(i = 0; i < psize/4; i++) printf("%dn",ptr[i]);
    return 0;
}

让我们用gcc编译它,并使用valgrind.这是valgrind返回的内容:

==17841== Memcheck,a memory error detector
==17841== Copyright (C) 2002-2012,and GNU GPL'd,by Julian Seward et al.
==17841== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==17841== Command: ./test
==17841== 
------------ printing numbers from 0 to 1023
==17841== 
==17841== HEAP SUMMARY:
==17841==     in use at exit: 0 bytes in 0 blocks
==17841==   total heap usage: 0 allocs,0 frees,0 bytes allocated
==17841== 
==17841== All heap blocks were freed -- no leaks are possible
==17841== 
==17841== For counts of detected and suppressed errors,rerun with: -v
==17841== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)

这是意料之外的事情,我们通常希望在退出程序之前取消映射页面以查看此类消息.

起初我认为页面可能会被懒惰地映射,这就是为什么我强迫在页面上执行某些操作,例如更改值和打印它们,但我们可以看到这不是问题.

这可能与valgrind或我对mmap和valgrind如何工作的理解有关.

解决方法

mmap doesn’t increase heap size

堆与从mmap获得的内存分开. Unix进程获取内存有两种基本方法:

>通过brk(2)/ sbrk(2)增加“break” – 这就是堆
>通过使用mmap在内存中映射 – 这些独立于堆

Anatomy of a Program in Memory有一个很好的图片:

This is probably something wrong with valgrind or my understanding of
how mmap and valgrind works.

阅读memcheck manual可能会有所帮助,尤其是关于自定义分配器的部分.它的要点是,为了泄漏检查的目的,mmap分配的块对于valgrind是不可见的.它只拦截malloc,calloc,free,new等.

令人困惑的是,valgrind会跟踪一些mmap分配的区域!例如,当malloc选择mmap内存而不是使用堆时,会发生这种情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读