This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
This time with the patch attached. On Tue, Jul 20, 2010 at 4:09 PM, Cary Coutant <ccoutant@google.com> wrote: > I used tcmalloc to profile the heap usage of gold while building a > large binary compiled with -O2 and -g, and found that the > Merged_strings structures were responsible for just over 50% of the > total heap used by gold. That structure has 6 fields: a pointer to the > object, the input section index, the input offset, a pointer to the > string itself, the length of the string, and the stringpool key. The > string field was never used, so I removed it. The pointer to the > object and the input section index were common across fairly large > lists of strings, so I separated the one list per output section into > separate lists for each (object, shndx), and removed those two fields > from the Merged_string struct. The length field was easily recomputed > by subtracting adjacent input offsets, so I removed it, too. The > result is a 67% reduction in the size of the Merged_string structure, > and the net effect was to reduce the total heap used for my benchmark > from 3.45 GiB to 2.56 GiB (25% less heap). > > The Object_merge_map structure is now responsible for more heap than > anything else; I'll be taking a look at reducing its memory footprint > next. > > Tested on x86_64 Linux. OK? > > -cary > > ? ? ? ?* merge.h (Output_merge_string::Merged_string): Remove object, shndx, > ? ? ? ?string, and length fields. > ? ? ? ?(Output_merge_string::Merged_strings_list): New type. > ? ? ? ?(Output_merge_string::Merged_strings_lists): New typedef. > ? ? ? ?(Output_merge_string): Replace merged_strings_ with > ? ? ? ?merged_strings_lists_. > ? ? ? ?* merge.cc (Output_merge_string::do_add_input_section): Allocate new > ? ? ? ?Merged_strings_list per input object and section. ?Don't store pointer > ? ? ? ?to the string. ?Don't store length with each merged string entry. > ? ? ? ?(Output_merge_string::finalize_merged_data): Loop over list of merged > ? ? ? ?strings lists. ?Recompute length of each merged string. >
Attachment:
gold-compress-debug-patch.txt
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |