forked from lix-project/lix
* Keep some statistics about memory allocation.
This commit is contained in:
parent
b803fb95cb
commit
6980544467
|
@ -65,6 +65,13 @@ private:
|
|||
};
|
||||
|
||||
|
||||
static const unsigned int maxLoadFactor = /* 1 / */ 3;
|
||||
static unsigned int nrResizes = 0;
|
||||
static unsigned int sizeTotalAlloc = 0;
|
||||
static unsigned int sizeCurAlloc = 0;
|
||||
static unsigned int sizeMaxAlloc = 0;
|
||||
|
||||
|
||||
ATermMap::ATermMap(unsigned int expectedCount)
|
||||
{
|
||||
init(expectedCount * 10 / 9); /* slight adjustment */
|
||||
|
@ -110,6 +117,7 @@ void ATermMap::free()
|
|||
if (hashTable) {
|
||||
ATunprotectArray((ATerm *) hashTable);
|
||||
::free(hashTable);
|
||||
sizeCurAlloc -= sizeof(KeyValue) * capacity;
|
||||
hashTable = 0;
|
||||
}
|
||||
}
|
||||
|
@ -124,10 +132,6 @@ static unsigned int roundToPowerOf2(unsigned int x)
|
|||
}
|
||||
|
||||
|
||||
static const unsigned int maxLoadFactor = /* 1 / */ 3;
|
||||
static unsigned int nrResizes = 0;
|
||||
|
||||
|
||||
void ATermMap::resizeTable(unsigned int expectedCount)
|
||||
{
|
||||
if (expectedCount == 0) expectedCount = 1;
|
||||
|
@ -141,6 +145,9 @@ void ATermMap::resizeTable(unsigned int expectedCount)
|
|||
maxCount = expectedCount;
|
||||
capacity = roundToPowerOf2(maxCount * maxLoadFactor);
|
||||
hashTable = (KeyValue *) calloc(sizeof(KeyValue), capacity);
|
||||
sizeTotalAlloc += sizeof(KeyValue) * capacity;
|
||||
sizeCurAlloc += sizeof(KeyValue) * capacity;
|
||||
if (sizeCurAlloc > sizeMaxAlloc) sizeMaxAlloc = sizeCurAlloc;
|
||||
ATprotectArray((ATerm *) hashTable, capacity * 2);
|
||||
|
||||
// cout << capacity << endl;
|
||||
|
@ -151,6 +158,7 @@ void ATermMap::resizeTable(unsigned int expectedCount)
|
|||
copy(oldHashTable, oldCapacity);
|
||||
ATunprotectArray((ATerm *) oldHashTable);
|
||||
::free(oldHashTable);
|
||||
sizeCurAlloc -= sizeof(KeyValue) * oldCapacity;
|
||||
nrResizes++;
|
||||
}
|
||||
}
|
||||
|
@ -325,7 +333,10 @@ int main(int argc, char * * argv)
|
|||
map.get(someTerm());
|
||||
}
|
||||
|
||||
cout << "RESIZES: " << nrResizes << endl;
|
||||
cout << "RESIZES: " << nrResizes << " "
|
||||
<< sizeTotalAlloc << " "
|
||||
<< sizeCurAlloc << " "
|
||||
<< sizeMaxAlloc << endl;
|
||||
|
||||
cout << "SET: "
|
||||
<< nrItemsSet << " "
|
||||
|
|
Loading…
Reference in a new issue