开发者

Arena in Malloc Function

开发者 https://www.devze.com 2022-12-30 15:09 出处:网络
I am using malloc_stats() to print malloc related statistics in which I am finding \"Arena 0\" for some programs and \"Ar开发者_Python百科ena 0 and Arena 1\" for some other programs.

I am using malloc_stats() to print malloc related statistics in which I am finding "Arena 0" for some programs and "Ar开发者_Python百科ena 0 and Arena 1" for some other programs.

What do these arenas represent?


The heap code resides inside the glibc component, and is packaged in the libc.so.x shared library. The current implementation of the heap uses multiple independent sub-heaps called arenas. Each arena has its own mutex for concurrency protection. Thus if there are sufficient arenas within a process' heap, and a mechanism to distribute the threads' heap accesses evenly between them, then the potential for contention for the mutexes should be minimal. It turns out that this works well for allocations. In malloc(), a test is made to see if the mutex for current target arena for the current thread is free (trylock). If so then the arena is now locked and the allocation proceeds. If the mutex is busy then each remaining arena is tried in turn and used if the mutex is not busy. In the event that no arena can be locked without blocking, a fresh new arena is created. This arena by definition is not already locked, so the allocation can now proceed without blocking. Lastly, the ID of the arena last used by a thread is retained in thread local storage, and subsequently used as the first arena to try when malloc() is next called by that thread. Therefore all calls to malloc() will proceed without blocking.


See link text. It looks like heap is a collection of arenas ("sub-heaps") to handle memory allocation between several threads, thus reducing contention.


In certain malloc implementations, an "arena" is a pool of memory from which individual allocations are made. The algorithms to determine which arena is used will differ between implementations, so it's not possible for us to explain why you see a difference. One common factor is allocation size.


Everything is there: http://www.gnu.org/software/libc/manual/html_node/Statistics-of-Malloc.html

int arena
This is the total size of memory allocated with sbrk by malloc, in bytes.

0

精彩评论

暂无评论...
验证码 换一张
取 消