* 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:
		
							parent
							
								
									7d47498b5e
								
							
						
					
					
						commit
						816f9c0f6f
					
				
					 2 changed files with 8 additions and 1 deletions
				
			
		|  | @ -1058,6 +1058,7 @@ void EvalState::printStats() | |||
|     printMsg(v, format("  stack space per eval() level: %1% bytes") % ((&x - deepestStack) / (float) maxRecursionDepth)); | ||||
|     printMsg(v, format("  values allocated: %1%") % nrValues); | ||||
|     printMsg(v, format("  environments allocated: %1%") % nrEnvs); | ||||
|     printMsg(v, format("  symbols in symbol table: %1%") % symbols.size()); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ | |||
| #define __SYMBOL_TABLE_H | ||||
| 
 | ||||
| #include <map> | ||||
| #include <tr1/unordered_set> | ||||
| 
 | ||||
| #include "types.hh" | ||||
| 
 | ||||
|  | @ -59,7 +60,7 @@ inline std::ostream & operator << (std::ostream & str, const Symbol & sym) | |||
| class SymbolTable | ||||
| { | ||||
| private: | ||||
|     typedef std::set<string> Symbols; | ||||
|     typedef std::tr1::unordered_set<string> Symbols; | ||||
|     Symbols symbols; | ||||
| 
 | ||||
| public: | ||||
|  | @ -68,6 +69,11 @@ public: | |||
|         std::pair<Symbols::iterator, bool> res = symbols.insert(s); | ||||
|         return Symbol(&*res.first); | ||||
|     } | ||||
| 
 | ||||
|     unsigned int size() const | ||||
|     { | ||||
|         return symbols.size(); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue