forked from Imagelibrary/binutils-gdb
2003-08-21 Michael Chastain <mec@shout.net>
* symtab.h: Add doco on the space critical structures and some measurements of space usage.
This commit is contained in:
52
gdb/symtab.h
52
gdb/symtab.h
@@ -35,13 +35,55 @@ struct blockvector;
|
||||
struct axs_value;
|
||||
struct agent_expr;
|
||||
|
||||
/* Some of the structures in this file are space critical.
|
||||
The space-critical structures are:
|
||||
|
||||
struct general_symbol_info
|
||||
struct symbol
|
||||
struct partial_symbol
|
||||
|
||||
These structures are layed out to encourage good packing.
|
||||
They use ENUM_BITFIELD and short int fields, and they order the
|
||||
structure members so that fields less than a word are next
|
||||
to each other so they can be packed together. */
|
||||
|
||||
/* Rearranged: used ENUM_BITFIELD and rearranged field order in
|
||||
all the space critical structures (plus struct minimal_symbol).
|
||||
Memory usage dropped from 99360768 bytes to 90001408 bytes.
|
||||
I measured this with before-and-after tests of
|
||||
"HEAD-old-gdb -readnow HEAD-old-gdb" and
|
||||
"HEAD-new-gdb -readnow HEAD-old-gdb" on native i686-pc-linux-gnu,
|
||||
red hat linux 8, with LD_LIBRARY_PATH=/usr/lib/debug,
|
||||
typing "maint space 1" at the first command prompt.
|
||||
|
||||
Here is another measurement (from andrew c):
|
||||
# no /usr/lib/debug, just plain glibc, like a normal user
|
||||
gdb HEAD-old-gdb
|
||||
(gdb) break internal_error
|
||||
(gdb) run
|
||||
(gdb) maint internal-error
|
||||
(gdb) backtrace
|
||||
(gdb) maint space 1
|
||||
|
||||
gdb gdb_6_0_branch 2003-08-19 space used: 8896512
|
||||
gdb HEAD 2003-08-19 space used: 8904704
|
||||
gdb HEAD 2003-08-21 space used: 8396800 (+symtab.h)
|
||||
gdb HEAD 2003-08-21 space used: 8265728 (+gdbtypes.h)
|
||||
|
||||
The third line shows the savings from the optimizations in symtab.h.
|
||||
The fourth line shows the savings from the optimizations in
|
||||
gdbtypes.h. Both optimizations are in gdb HEAD now.
|
||||
|
||||
--chastain 2003-08-21 */
|
||||
|
||||
|
||||
|
||||
/* Define a structure for the information that is common to all symbol types,
|
||||
including minimal symbols, partial symbols, and full symbols. In a
|
||||
multilanguage environment, some language specific information may need to
|
||||
be recorded along with each symbol.
|
||||
be recorded along with each symbol. */
|
||||
|
||||
These fields are ordered to encourage good packing, since we frequently
|
||||
have tens or hundreds of thousands of these. */
|
||||
/* This structure is space critical. See space comments at the top. */
|
||||
|
||||
struct general_symbol_info
|
||||
{
|
||||
@@ -557,6 +599,8 @@ struct alias_list
|
||||
struct alias_list *next;
|
||||
};
|
||||
|
||||
/* This structure is space critical. See space comments at the top. */
|
||||
|
||||
struct symbol
|
||||
{
|
||||
|
||||
@@ -638,6 +682,8 @@ struct symbol
|
||||
on a partial symtab list and which points to the corresponding
|
||||
normal symtab once the partial_symtab has been referenced. */
|
||||
|
||||
/* This structure is space critical. See space comments at the top. */
|
||||
|
||||
struct partial_symbol
|
||||
{
|
||||
|
||||
|
||||
Reference in New Issue
Block a user