* Use std::tr1::unordered_set instead of std::set for the symbol

table.  This gives a 10% speed increase on `nix-instantiate
  /etc/nixos/nixos -A system --readonly-mode'.
This commit is contained in:
Eelco Dolstra 2010-04-13 14:34:11 +00:00
parent 7d47498b5e
commit 816f9c0f6f
2 changed files with 8 additions and 1 deletions

View File

@ -1058,6 +1058,7 @@ void EvalState::printStats()
printMsg(v, format(" stack space per eval() level: %1% bytes") % ((&x - deepestStack) / (float) maxRecursionDepth)); printMsg(v, format(" stack space per eval() level: %1% bytes") % ((&x - deepestStack) / (float) maxRecursionDepth));
printMsg(v, format(" values allocated: %1%") % nrValues); printMsg(v, format(" values allocated: %1%") % nrValues);
printMsg(v, format(" environments allocated: %1%") % nrEnvs); printMsg(v, format(" environments allocated: %1%") % nrEnvs);
printMsg(v, format(" symbols in symbol table: %1%") % symbols.size());
} }

View File

@ -2,6 +2,7 @@
#define __SYMBOL_TABLE_H #define __SYMBOL_TABLE_H
#include <map> #include <map>
#include <tr1/unordered_set>
#include "types.hh" #include "types.hh"
@ -59,7 +60,7 @@ inline std::ostream & operator << (std::ostream & str, const Symbol & sym)
class SymbolTable class SymbolTable
{ {
private: private:
typedef std::set<string> Symbols; typedef std::tr1::unordered_set<string> Symbols;
Symbols symbols; Symbols symbols;
public: public:
@ -68,6 +69,11 @@ public:
std::pair<Symbols::iterator, bool> res = symbols.insert(s); std::pair<Symbols::iterator, bool> res = symbols.insert(s);
return Symbol(&*res.first); return Symbol(&*res.first);
} }
unsigned int size() const
{
return symbols.size();
}
}; };
} }