]> git.proxmox.com Git - libgit2.git/commit - src/config_file.c
Implement git_pool paged memory allocator
authorRussell Belfer <rb@github.com>
Tue, 17 Apr 2012 17:14:24 +0000 (10:14 -0700)
committerRussell Belfer <rb@github.com>
Wed, 25 Apr 2012 17:42:37 +0000 (10:42 -0700)
commit2bc8fa0227d549006a9870620ca1f2e08a0c305e
tree11239db2261a4b08a627072d89c65eb9c7e8a041
parenta7d19b975a604b2800ba428a185895241313d1f6
Implement git_pool paged memory allocator

This adds a `git_pool` object that can do simple paged memory
allocation with free for the entire pool at once.  Using this,
you can replace many small allocations with large blocks that
can then cheaply be doled out in small pieces.  This is best
used when you plan to free the small blocks all at once - for
example, if they represent the parsed state from a file or data
stream that are either all kept or all discarded.

There are two real patterns of usage for `git_pools`: either
for "string" allocation, where the item size is a single byte
and you end up just packing the allocations in together, or for
"fixed size" allocation where you are allocating a large object
(e.g. a `git_oid`) and you generally just allocation single
objects that can be tightly packed.  Of course, you can use it
for other things, but those two cases are the easiest.
13 files changed:
src/blob.c
src/buffer.c
src/config_file.c
src/errors.c
src/filter.c
src/global.c
src/odb.c
src/pool.c [new file with mode: 0644]
src/pool.h [new file with mode: 0644]
src/refs.c
src/remote.c
src/repository.c
tests-clar/core/pool.c [new file with mode: 0644]