* 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("  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()); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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(); | ||||||
|  |     } | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue