12

I was reading about mmap in wikipedia and trying out this example http://en.wikipedia.org/wiki/Mmap#Example_of_usage. I have compiled this program with gcc and ran valgrind overit.

Here is valgrind output:

# valgrind a.out 
==7018== Memcheck, a memory error detector
==7018== Copyright (C) 2002-2011, and GNU GPL'd, by Julian Seward et al.
==7018== Using Valgrind-3.7.0 and LibVEX; rerun with -h for copyright info
==7018== Command: a.out
==7018== 
PID 7018:   anonymous string 1, zero-backed string 1
PID 7019:   anonymous string 1, zero-backed string 1
PID 7018:   anonymous string 2, zero-backed string 2
==7018== 
==7018== HEAP SUMMARY:
==7018==     in use at exit: 0 bytes in 0 blocks
==7018==   total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==7018== 
==7018== All heap blocks were freed -- no leaks are possible
==7018== 
==7018== For counts of detected and suppressed errors, rerun with: -v
==7018== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
PID 7019:   anonymous string 2, zero-backed string 2
==7019== 
==7019== HEAP SUMMARY:
==7019==     in use at exit: 0 bytes in 0 blocks
==7019==   total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==7019== 
==7019== All heap blocks were freed -- no leaks are possible
==7019== 
==7019== For counts of detected and suppressed errors, rerun with: -v
==7019== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)

My Question is

Does mmap allocate memory on Heap ? if not what does munmap do ?

Sethu
  • 323
  • 1
  • 3
  • 7

2 Answers2

24

On a Unix-like system, your program's address space consists of one or more virtual memory regions, each of which is mapped by the OS to physical memory, to a file, or to nothing at all.

The heap is, generally speaking, one specific memory region created by the C runtime, and managed by malloc (which in turn uses the brk and sbrk system calls to grow and shrink).

mmap is a way of creating new memory regions, independently of malloc (and so independently of the heap). munmap is simply its inverse, it releases these regions.

Oliver Charlesworth
  • 267,707
  • 33
  • 569
  • 680
9

mmapped memory is neither heap nor stack. It is mapped into virtual address space of the calling process, but it's not allocated on the heap.

piokuc
  • 25,594
  • 11
  • 72
  • 102