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. OK, this time with the *right* patch attached. Sorry! > 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-merge-string-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] |