mirror of
https://github.com/HChaZZY/Stockfish.git
synced 2025-12-21 09:37:16 +08:00
Re-add "Cache line aligned TT"
But this time do not play with pointers, in particular do not assume that size_t is an unsigned type of the same width as pointers. This code should be fully portable. No functional change.
This commit is contained in:
@@ -40,16 +40,18 @@ void TranspositionTable::set_size(size_t mbSize) {
|
||||
return;
|
||||
|
||||
hashMask = size - ClusterSize;
|
||||
delete [] table;
|
||||
table = new (std::nothrow) TTEntry[size];
|
||||
free(mem);
|
||||
mem = malloc(size * sizeof(TTEntry) + CACHE_LINE_SIZE - 1);
|
||||
|
||||
if (!table)
|
||||
if (!mem)
|
||||
{
|
||||
std::cerr << "Failed to allocate " << mbSize
|
||||
<< "MB for transposition table." << std::endl;
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// Align table start address to a cache line
|
||||
for (char* c = (char*)mem; unsigned(table = (TTEntry*)(c)) % CACHE_LINE_SIZE; c++) {}
|
||||
clear(); // Operator new is not guaranteed to initialize memory to zero
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user