diff options
| author | Greg Clayton <gclayton@apple.com> | 2011-11-22 21:35:27 +0000 | 
|---|---|---|
| committer | Greg Clayton <gclayton@apple.com> | 2011-11-22 21:35:27 +0000 | 
| commit | 1959df2c9c2ee2a0b82d08fb6fe0bdfb32d70598 (patch) | |
| tree | 7018c720434c92a9c3b37084f00121f0e798d6a1 | |
| parent | 01575f86aa6dabbdd89f29696c80e3d9ffaa5de9 (diff) | |
| download | bcm5719-llvm-1959df2c9c2ee2a0b82d08fb6fe0bdfb32d70598.tar.gz bcm5719-llvm-1959df2c9c2ee2a0b82d08fb6fe0bdfb32d70598.zip  | |
Shrink-to-fit our std::vector<DWARFDebugInfoEntry> collections and save 20%
to 30% of memory. The size doubling was killing us and we ended up with up to
just under 50% of empty capacity. Cleaning this up saves us a ton of memory.
llvm-svn: 145086
3 files changed, 16 insertions, 8 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp index aa8699f0ad2..096710cd258 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.cpp @@ -271,7 +271,17 @@ DWARFCompileUnit::ExtractDIEsIfNeeded (bool cu_die_only)          }          fprintf (stderr, "warning: DWARF compile unit extends beyond its bounds cu 0x%8.8x at 0x%8.8x in '%s'\n", GetOffset(), offset, path);      } + +    // Since std::vector objects will double their size, we really need to +    // make a new array with the perfect size so we don't end up wasting +    // space. So here we copy and swap to make sure we don't have any extra +    // memory taken up. +    if (m_die_array.size () < m_die_array.capacity()) +    { +        DWARFDebugInfoEntry::collection exact_size_die_array (m_die_array.begin(), m_die_array.end()); +        exact_size_die_array.swap (m_die_array); +    }      LogSP log (LogChannelDWARF::GetLogIfAll (DWARF_LOG_DEBUG_INFO));      if (log)      { diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h index 49b05d14473..fc3dd3bbb01 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFCompileUnit.h @@ -74,13 +74,11 @@ public:      }      void -    AddDIE(DWARFDebugInfoEntry& die) +    AddDIE (DWARFDebugInfoEntry& die)      {          // The average bytes per DIE entry has been seen to be -        // around 14-20 so lets pre-reserve the needed memory for -        // our DIE entries accordingly. Search forward for "Compute -        // average bytes per DIE" to see #if'ed out code that does -        // that determination. +        // around 14-20 so lets pre-reserve half of that since +        // we are now stripping the NULL tags.           // Only reserve the memory if we are adding children of          // the main compile unit DIE. The compile unit DIE is always @@ -88,7 +86,7 @@ public:          // the first compile unit child DIE and should reserve          // the memory.          if (m_die_array.empty()) -            m_die_array.reserve(GetDebugInfoSize() / 14); +            m_die_array.reserve(GetDebugInfoSize() / 24);          m_die_array.push_back(die);      } diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp index 0d2adb05cf9..20bac6b7423 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfoEntry.cpp @@ -1926,8 +1926,8 @@ DWARFDebugInfoEntry::DumpDIECollection (Stream &strm, DWARFDebugInfoEntry::colle  {      DWARFDebugInfoEntry::const_iterator pos;      DWARFDebugInfoEntry::const_iterator end = die_collection.end(); -    puts("offset    parent   sibling  child"); -    puts("--------  -------- -------- --------"); +    strm.PutCString("\noffset    parent   sibling  child\n"); +    strm.PutCString("--------  -------- -------- --------\n");      for (pos = die_collection.begin(); pos != end; ++pos)      {          const DWARFDebugInfoEntry& die_ref = *pos;  | 

