Tune the symbol and the literal tables.

This commit is contained in:
Roberto Raggi
2010-09-02 16:44:58 +02:00
parent 15b0082b3a
commit ec64e1d7bd
2 changed files with 12 additions and 4 deletions

View File

@@ -138,7 +138,11 @@ public:
_Literal *literal = new _Literal(chars, size);
if (++_literalCount == _allocatedLiterals) {
_allocatedLiterals += 32;
if (! _allocatedLiterals)
_allocatedLiterals = 4;
else
_allocatedLiterals <<= 1;
_literals = (_Literal **) std::realloc(_literals, sizeof(_Literal *) * _allocatedLiterals);
}
@@ -161,7 +165,11 @@ protected:
if (_buckets)
std::free(_buckets);
_allocatedBuckets += 32;
if (! _allocatedBuckets)
_allocatedBuckets = 4;
else
_allocatedBuckets <<= 1;
_buckets = (_Literal **) std::calloc(_allocatedBuckets, sizeof(_Literal *));
_Literal **lastLiteral = _literals + (_literalCount + 1);

View File

@@ -105,7 +105,7 @@ private:
void rehash();
private:
enum { DefaultInitialSize = 11 };
enum { DefaultInitialSize = 4 };
Scope *_owner;
Symbol **_symbols;
@@ -147,7 +147,7 @@ void SymbolTable::enterSymbol(Symbol *symbol)
symbol->_scope = _owner;
_symbols[_symbolCount] = symbol;
if (_symbolCount >= _hashSize * 0.6)
if (_symbolCount * 5 >= _hashSize * 3)
rehash();
else {
const unsigned h = hashValue(symbol);