diff options
author | dodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-10-17 10:00:07 +0000 |
---|---|---|
committer | dodji <dodji@138bc75d-0d04-0410-961f-82ee72b054a4> | 2011-10-17 10:00:07 +0000 |
commit | 1ae3520e0d4d2a5693961919636474de0a4faef6 (patch) | |
tree | 0b0e309c095d0459230339edc0343cafe8f0c4c8 /gcc/ggc.h | |
parent | e77b8253aa187580c9e185461ed28c207e693126 (diff) | |
download | gcc-1ae3520e0d4d2a5693961919636474de0a4faef6.tar.gz |
Reduce memory waste due to non-power-of-2 allocs
This patch basically arranges for the allocation size of line_map
buffers to be as close as possible to a power of two. This
*significantly* decreases peak memory consumption as (macro) maps are
numerous and stay live during all the compilation.
The patch adds a new ggc_round_alloc_size interface to the ggc
allocator. In each of the two main allocator implementations ('page'
and 'zone') the function has been extracted from the main allocation
function code and returns the actual size of the allocated memory
region, thus giving a chance to the caller to maximize the amount of
memory it actually uses from the allocated memory region. In the
'none' allocator implementation (that uses xmalloc) the
ggc_round_alloc_size just returns the requested allocation size.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@180086 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ggc.h')
-rw-r--r-- | gcc/ggc.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/gcc/ggc.h b/gcc/ggc.h index 30eca66c302..704237cc045 100644 --- a/gcc/ggc.h +++ b/gcc/ggc.h @@ -145,6 +145,8 @@ extern void gt_pch_save (FILE *f); /* The internal primitive. */ extern void *ggc_internal_alloc_stat (size_t MEM_STAT_DECL); +extern size_t ggc_round_alloc_size (size_t requested_size); + #define ggc_internal_alloc(s) ggc_internal_alloc_stat (s MEM_STAT_INFO) /* Allocate an object of the specified type and size. */ |