valueSize(): Take into account list/bindings/env size
This commit is contained in:
		
							parent
							
								
									e659978ced
								
							
						
					
					
						commit
						7a84143910
					
				
					 1 changed files with 15 additions and 6 deletions
				
			
		|  | @ -442,7 +442,7 @@ Env & EvalState::allocEnv(unsigned int size) | |||
|     Env * env = (Env *) GC_MALLOC(sizeof(Env) + size * sizeof(Value *)); | ||||
|     env->size = size; | ||||
| 
 | ||||
|     /* Clear the values because maybeThunk() and lookupVar fromWith expects this. */ | ||||
|     /* Clear the values because maybeThunk() and lookupVar fromWith expect this. */ | ||||
|     for (unsigned i = 0; i < size; ++i) | ||||
|         env->values[i] = 0; | ||||
| 
 | ||||
|  | @ -1498,6 +1498,7 @@ void EvalState::printStats() | |||
| 
 | ||||
|     printMsg(v, format("  time elapsed: %1%") % cpuTime); | ||||
|     printMsg(v, format("  size of a value: %1%") % sizeof(Value)); | ||||
|     printMsg(v, format("  size of an attr: %1%") % sizeof(Attr)); | ||||
|     printMsg(v, format("  environments allocated: %1% (%2% bytes)") % nrEnvs % bEnvs); | ||||
|     printMsg(v, format("  list elements: %1% (%2% bytes)") % nrListElems % bLists); | ||||
|     printMsg(v, format("  list concatenations: %1%") % nrListConcats); | ||||
|  | @ -1575,12 +1576,20 @@ size_t valueSize(Value & v) | |||
|             sz += doString(v.path); | ||||
|             break; | ||||
|         case tAttrs: | ||||
|             for (auto & i : *v.attrs) | ||||
|                 sz += doValue(*i.value); | ||||
|             if (seen.find(v.attrs) == seen.end()) { | ||||
|                 seen.insert(v.attrs); | ||||
|                 sz += sizeof(Bindings) + sizeof(Attr) * v.attrs->capacity(); | ||||
|                 for (auto & i : *v.attrs) | ||||
|                     sz += doValue(*i.value); | ||||
|             } | ||||
|             break; | ||||
|         case tList: | ||||
|             for (unsigned int n = 0; n < v.list.length; ++n) | ||||
|                 sz += doValue(*v.list.elems[n]); | ||||
|             if (seen.find(v.list.elems) == seen.end()) { | ||||
|                 seen.insert(v.list.elems); | ||||
|                 sz += v.list.length * sizeof(Value *); | ||||
|                 for (unsigned int n = 0; n < v.list.length; ++n) | ||||
|                     sz += doValue(*v.list.elems[n]); | ||||
|             } | ||||
|             break; | ||||
|         case tThunk: | ||||
|             sz += doEnv(*v.thunk.env); | ||||
|  | @ -1612,7 +1621,7 @@ size_t valueSize(Value & v) | |||
|         if (seen.find(&env) != seen.end()) return 0; | ||||
|         seen.insert(&env); | ||||
| 
 | ||||
|         size_t sz = sizeof(Env); | ||||
|         size_t sz = sizeof(Env) + sizeof(Value *) * env.size; | ||||
| 
 | ||||
|         for (unsigned int i = 0; i < env.size; ++i) | ||||
|             if (env.values[i]) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue