]> sourceware.org Git - systemtap.git/commitdiff
make the mod_cu_function_cache a hash_map instead of map for more go-go
authorFrank Ch. Eigler <fche@elastic.org>
Sat, 17 May 2008 12:52:19 +0000 (08:52 -0400)
committerFrank Ch. Eigler <fche@elastic.org>
Sat, 17 May 2008 12:52:19 +0000 (08:52 -0400)
ChangeLog
tapsets.cxx

index 24fa8e3bd0c5554c59501828a4e1bc1d26af8f01..139ae6ac6f8962c0dc5e21d5d47a065b5a091307 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-05-17  Frank Ch. Eigler  <fche@elastic.org>
+
+       * tapsets.cxx (cu_function_cache_t): Switch to <ext/hash_map>s,
+       since these tables tend to get pretty big.
+
 2008-05-16  Frank Ch. Eigler  <fche@elastic.org>
 
        PR 5643
index 96a930190816bd5209fd6997c65cdedcc5a72fe2..c8f77fdea150476cb588aee5adc6cf8c3ce68734 100644 (file)
@@ -20,6 +20,7 @@
 #include <deque>
 #include <iostream>
 #include <map>
+#include <ext/hash_map>
 #include <set>
 #include <sstream>
 #include <stdexcept>
@@ -54,6 +55,7 @@ extern "C" {
 #endif
 
 using namespace std;
+using namespace __gnu_cxx;
 
 
 // ------------------------------------------------------------------------
@@ -535,8 +537,12 @@ module_cache
 };
 typedef struct module_cache module_cache_t;
 
-typedef map<string,Dwarf_Die> cu_function_cache_t;
-typedef map<string,cu_function_cache_t*> mod_cu_function_cache_t; // module:cu -> function -> die
+struct stringhash {
+  size_t operator() (const string& s) const { hash<const char*> h; return h(s.c_str()); }
+};
+
+typedef hash_map<string,Dwarf_Die,stringhash> cu_function_cache_t;
+typedef hash_map<string,cu_function_cache_t*,stringhash> mod_cu_function_cache_t; // module:cu -> function -> die
 
 struct
 symbol_table
@@ -2491,7 +2497,7 @@ dwflpp::iterate_over_functions (int (* callback)(Dwarf_Die * func, void * arg),
   string subkey = q->function;
   if (v->find(subkey) != v->end())
     {
-      Dwarf_Die die = v->at(subkey);
+      Dwarf_Die die = v->find(subkey)->second;
       if (q->sess.verbose > 4)
         clog << "function cache " << key << " hit " << subkey << endl;
       return (*callback)(& die, data);
This page took 0.041034 seconds and 5 git commands to generate.