How are malloc and free implemented?

后端 未结 6 997
心在旅途
心在旅途 2020-12-16 00:42

I want to implement my own dynamic memory management system in order to add new features that help to manage memory in C++.

I use Windows (XP) and Linux (Ubuntu). Wh

相关标签:
6条回答
  • 2020-12-16 01:01

    Try http://www.dent.med.uni-muenchen.de/~wmglo/malloc-slides.html for pointers.

    This is a brief performance comparison, with pointers to eight different malloc/free implementations. A nice starting point, because a few good reference statistics will help you determine whether you've improved on the available implementations - or not.

    0 讨论(0)
  • 2020-12-16 01:04

    If you are simply wrapping the system calls then you are probably not gaining anything on using the standard malloc - thats all they are doing.

    It's more common to malloc (or HeapAlloc() etc ) a single block of memory at the start of the program and manage the allocation into this yourself, this can be more efficient if you know you are going to be creating/discarding a lot of small blocks of memory regularly.

    0 讨论(0)
  • 2020-12-16 01:07

    garbage collector is slow

    This is a completely meaningless statement. In many practical situations, programs can get a significant performance boost by using a Garbage Collector, especially in multi-threaded scenarios. In many other situations, Garbage Collectors do incur a performance penalty.

    0 讨论(0)
  • 2020-12-16 01:17

    brk is the system call used on Linux to implement malloc and free. Try the man page for information.

    You've got the Windows stuff down already.

    Seeing the other answers here, I would like to note that you are probably reinventing the wheel; there are many good malloc implementations out there already. But programming malloc is a good thought exercise - take a look here for a nice homework assignment (originally CMU code) implementing the same. Their shell gives you a bit more than the Linux OS actually does, though :-).

    0 讨论(0)
  • 2020-12-16 01:21

    In *nix, malloc() is implemented at the C library level. It uses brk()/sbrk() to grow/shrink the data segment, and mmap/munmap to request/release memory mappings. See this page for a description of the malloc implementation used in glibc and uClibc.

    0 讨论(0)
  • 2020-12-16 01:22

    On linux, malloc and free are not system calls. malloc/free obtains memory from the kernel by extending and shrinking(if it can) the data segment using the brk system calls as well as obtaining anonymous memory with mmap - and malloc manages memory within those regions. Some basic information any many great references can be found here

    0 讨论(0)
提交回复
热议问题