mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-06 12:09:26 +08:00
Create a correctly-sized demangled names hashtable
If we have a minsym count, we know the demangled names hashtable will be at least that big. So use that count to size it, so we don't have to resize/rehash it as much. This is a 6% improvement in minsym loading time. 2019-11-22 Christian Biesinger <cbiesinger@google.com> * symtab.c (create_demangled_names_hash): Use per_bfd-> minimal_symbol_count for computing the initial size, if greater than our default size. Change-Id: I1f074d38e1d90af58705ec852f90c84cc034cd2e
This commit is contained in:
parent
85e7588dc4
commit
f8bab2d61d
@ -1,3 +1,9 @@
|
||||
2019-11-22 Christian Biesinger <cbiesinger@google.com>
|
||||
|
||||
* symtab.c (create_demangled_names_hash): Use per_bfd->
|
||||
minimal_symbol_count for computing the initial size, if greater
|
||||
than our default size.
|
||||
|
||||
2019-11-22 Tom de Vries <tdevries@suse.de>
|
||||
|
||||
* contrib/words.sh: Improve words extraction.
|
||||
|
14
gdb/symtab.c
14
gdb/symtab.c
@ -770,10 +770,20 @@ create_demangled_names_hash (struct objfile_per_bfd_storage *per_bfd)
|
||||
/* Choose 256 as the starting size of the hash table, somewhat arbitrarily.
|
||||
The hash table code will round this up to the next prime number.
|
||||
Choosing a much larger table size wastes memory, and saves only about
|
||||
1% in symbol reading. */
|
||||
1% in symbol reading. However, if the minsym count is already
|
||||
initialized (e.g. because symbol name setting was deferred to
|
||||
a background thread) we can initialize the hashtable with a count
|
||||
based on that, because we will almost certainly have at least that
|
||||
many entries. If we have a nonzero number but less than 256,
|
||||
we still stay with 256 to have some space for psymbols, etc. */
|
||||
|
||||
/* htab will expand the table when it is 3/4th full, so we account for that
|
||||
here. +2 to round up. */
|
||||
int minsym_based_count = (per_bfd->minimal_symbol_count + 2) / 3 * 4;
|
||||
int count = std::max (per_bfd->minimal_symbol_count, minsym_based_count);
|
||||
|
||||
per_bfd->demangled_names_hash.reset (htab_create_alloc
|
||||
(256, hash_demangled_name_entry, eq_demangled_name_entry,
|
||||
(count, hash_demangled_name_entry, eq_demangled_name_entry,
|
||||
free_demangled_name_entry, xcalloc, xfree));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user