]> git.sesse.net Git - freerainbowtables/blob - Server Applications/rsearchi/MemoryPool.cpp
rcracki_mt updated to rti2
[freerainbowtables] / Server Applications / rsearchi / MemoryPool.cpp
1 /*
2    RainbowCrack - a general propose implementation of Philippe Oechslin's faster time-memory trade-off technique.
3
4    Copyright (C) Zhu Shuanglei <shuanglei@hotmail.com>
5 */
6
7 #include "MemoryPool.h"
8 #include "Public.h"
9
10 CMemoryPool::CMemoryPool()
11 {
12         m_pMem = NULL;
13         m_nMemSize = 0;
14
15         unsigned int nAvailPhys = GetAvailPhysMemorySize();
16         if (nAvailPhys < 16 * 1024 * 1024)
17                 m_nMemMax = nAvailPhys / 2;                                     // Leave some memory for CChainWalkSet
18         else
19                 m_nMemMax = nAvailPhys - 8 * 1024 * 1024;       // Leave some memory for CChainWalkSet
20         m_nMemMax = 300 * 1024 * 1024;
21 }
22
23 CMemoryPool::~CMemoryPool()
24 {
25         if (m_pMem != NULL)
26         {
27                 delete m_pMem;
28                 m_pMem = NULL;
29                 m_nMemSize = 0;
30         }
31 }
32
33 unsigned char* CMemoryPool::Allocate(unsigned int nFileLen, unsigned int& nAllocatedSize)
34 {
35         if (nFileLen <= m_nMemSize)
36         {
37                 nAllocatedSize = nFileLen;
38                 return m_pMem;
39         }
40
41         unsigned int nTargetSize;
42         if (nFileLen < m_nMemMax)
43                 nTargetSize = nFileLen;
44         else
45                 nTargetSize = m_nMemMax;
46
47         // Free existing memory
48         if (m_pMem != NULL)
49         {
50                 delete m_pMem;
51                 m_pMem = NULL;
52                 m_nMemSize = 0;
53         }
54
55         // Allocate new memory
56         //printf("allocating %u bytes memory\n", nTargetSize);
57         m_pMem = new unsigned char[nTargetSize];
58         if (m_pMem != NULL)
59         {
60                 m_nMemSize = nTargetSize;
61                 nAllocatedSize = nTargetSize;
62                 return m_pMem;
63         }
64         else
65         {
66                 nAllocatedSize = 0;
67                 return NULL;
68         }
69 }