diff --git a/src/Memory.cpp b/src/Memory.cpp index f333d01f..4fcc1eda 100644 --- a/src/Memory.cpp +++ b/src/Memory.cpp @@ -9,6 +9,7 @@ #include "Memory.h" +#include "Init.h" Memory::Memory() @@ -30,15 +31,15 @@ void Memory::Reset() void Memory::ResetThread(const unsigned thrId) { - memory[thrId]->transTable->ResetMemory(TT_RESET_FREE_MEMORY); - memory[thrId]->memUsed = Memory::MemoryInUseMB(thrId); + memory[thrId].transTable->ResetMemory(TT_RESET_FREE_MEMORY); + memory[thrId].memUsed = Memory::MemoryInUseMB(thrId); } void Memory::ReturnThread(const unsigned thrId) { - memory[thrId]->transTable->ReturnAllMemory(); - memory[thrId]->memUsed = Memory::MemoryInUseMB(thrId); + memory[thrId].transTable->ReturnAllMemory(); + memory[thrId].memUsed = Memory::MemoryInUseMB(thrId); } @@ -53,13 +54,6 @@ void Memory::Resize( if (nThreads > n) { - // Downsize. - for (unsigned i = n; i < nThreads; i++) - { - memory[i]->transTable->ReturnAllMemory(); - delete memory[i]->transTable; - delete memory[i]; - } memory.resize(static_cast(n)); threadSizes.resize(static_cast(n)); } @@ -70,22 +64,21 @@ void Memory::Resize( threadSizes.resize(n); for (unsigned i = nThreads; i < n; i++) { - memory[i] = new ThreadData; if (flag == DDS_TT_SMALL) { - memory[i]->transTable = new TransTableS; + memory[i].transTable = std::unique_ptr(new TransTableS); threadSizes[i] = "S"; } else { - memory[i]->transTable = new TransTableL; + memory[i].transTable = std::unique_ptr(new TransTableL); threadSizes[i] = "L"; } - memory[i]->transTable->SetMemoryDefault(memDefault_MB); - memory[i]->transTable->SetMemoryMaximum(memMaximum_MB); + memory[i].transTable->SetMemoryDefault(memDefault_MB); + memory[i].transTable->SetMemoryMaximum(memMaximum_MB); - memory[i]->transTable->MakeTT(); + memory[i].transTable->MakeTT(); } } @@ -106,13 +99,13 @@ ThreadData * Memory::GetPtr(const unsigned thrId) cout << "Memory::GetPtr: " << thrId << " vs. " << nThreads << endl; exit(1); } - return memory[thrId]; + return &memory[thrId]; } double Memory::MemoryInUseMB(const unsigned thrId) const { - return memory[thrId]->transTable->MemoryInUse() + + return memory[thrId].transTable->MemoryInUse() + 8192. * sizeof(relRanksType) / static_cast(1024.); } diff --git a/src/Memory.h b/src/Memory.h index 3f86fa35..8f9ad678 100644 --- a/src/Memory.h +++ b/src/Memory.h @@ -10,6 +10,7 @@ #ifndef DDS_MEMORY_H #define DDS_MEMORY_H +#include #include #include "TransTable.h" @@ -78,7 +79,7 @@ struct ThreadData // 960 KB relRanksType rel[8192]; - TransTable * transTable; + std::unique_ptr transTable; Moves moves; @@ -116,7 +117,7 @@ class Memory { private: - vector memory; + vector memory; unsigned nThreads; vector threadSizes; diff --git a/src/dds.cpp b/src/dds.cpp index fad30225..2061036e 100644 --- a/src/dds.cpp +++ b/src/dds.cpp @@ -33,8 +33,6 @@ extern "C" BOOL APIENTRY DllMain( SetMaxThreads(0); else if (ul_reason_for_call == DLL_PROCESS_DETACH) { - CloseDebugFiles(); - FreeMemory(); #ifdef DDS_MEMORY_LEAKS_WIN32 _CrtDumpMemoryLeaks(); #endif @@ -58,8 +56,6 @@ void DDSInitialize(void) void DDSFinalize(void) { - CloseDebugFiles(); - FreeMemory(); } #elif defined(USES_CONSTRUCTOR) @@ -72,8 +68,6 @@ static void __attribute__ ((constructor)) libInit(void) static void __attribute__ ((destructor)) libEnd(void) { - CloseDebugFiles(); - FreeMemory(); } #endif