X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Ftt.cpp;h=773f03ccbac463929faf254ec4cb8e591d42c224;hp=b730dbeb63bafd6adc78424f8aba0ceb3983a22d;hb=62c707e1d5a33c0c431d9938997b63e9cdbd4aeb;hpb=23db43e698cfc697779a708f1dea43496c549c1d diff --git a/src/tt.cpp b/src/tt.cpp index b730dbeb..773f03cc 100644 --- a/src/tt.cpp +++ b/src/tt.cpp @@ -24,6 +24,7 @@ #include #include +#include #include "tt.h" @@ -54,24 +55,25 @@ void TranspositionTable::set_size(size_t mbSize) { size_t newSize = 1024; - // Transposition table consists of clusters and - // each cluster consists of ClusterSize number of TTEntries. - // Each non-empty entry contains information of exactly one position. - // newSize is the number of clusters we are going to allocate. - while ((2 * newSize) * sizeof(TTCluster) <= (mbSize << 20)) + // Transposition table consists of clusters and each cluster consists + // of ClusterSize number of TTEntries. Each non-empty entry contains + // information of exactly one position and newSize is the number of + // clusters we are going to allocate. + while (2ULL * newSize * sizeof(TTCluster) <= (mbSize << 20)) newSize *= 2; if (newSize != size) { size = newSize; delete [] entries; - entries = new TTCluster[size]; + entries = new (std::nothrow) TTCluster[size]; if (!entries) { std::cerr << "Failed to allocate " << mbSize << " MB for transposition table." << std::endl; - Application::exit_with_failure(); + exit(EXIT_FAILURE); } + clear(); } } @@ -120,7 +122,7 @@ void TranspositionTable::store(const Key posKey, Value v, ValueType t, Depth d, continue; c1 = (replace->generation() == generation ? 2 : 0); - c2 = (tte->generation() == generation ? -2 : 0); + c2 = (tte->generation() == generation || tte->type() == VALUE_TYPE_EXACT ? -2 : 0); c3 = (tte->depth() < replace->depth() ? 1 : 0); if (c1 + c2 + c3 > 0)