Dwp tool heap usage, reducing the memory foot-print.
Wed Nov 18 01:01:00 GMT 2015
> We are allocating a heap buffer to copy the stringpool buffer and then
> writing that to the output file. Why not just do it directly? I see
> this is done in two places, one to write the debug string table and
> another to write the section string table. These allocations are
> pretty significant (each ~20% the size of the input files combined).
> Looking into stringpool functions, I see there is one to write
> directly to a file
> template<typename Stringpool_char>
> void Stringpool_template<Stringpool_char>::write(Output_file* of, off_t offset)
> but that needs an Output_file object and we dont have one. What is the
> downside of eliminating this buffer?
I agree, this would make a significant improvement.
Unfortunately, Stringpool_template::write() assumes the output file is
memory mapped, and calls write_to_buffer() to write directly to the
mapped region. Dwp doesn't mmap the output file, so that won't work.
Probably the best approach would be to add a
Stringpool_template::write_to_file() that works like
write_to_buffer(), but instead writes the strings into a small
fixed-size buffer, flushing that buffer out to the file with
::fwrite() as it fills up (and at the end).
More information about the Binutils