diff --git a/src/shared/cplusplus/LiteralTable.h b/src/shared/cplusplus/LiteralTable.h index 1c85c6f13a04c78c80f6ab65fd15ea50fc5c0147..f95b79a7e6f7a63b582b9d465496a9b195c91b8d 100644 --- a/src/shared/cplusplus/LiteralTable.h +++ b/src/shared/cplusplus/LiteralTable.h @@ -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); diff --git a/src/shared/cplusplus/Scope.cpp b/src/shared/cplusplus/Scope.cpp index bc5eeb90bbc116e4bcae42eaab566efc4a8c9313..b500f178cb82b25c94c2152470fcb8f0d14bb47a 100644 --- a/src/shared/cplusplus/Scope.cpp +++ b/src/shared/cplusplus/Scope.cpp @@ -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);