diff options
author | Daniel Dragan <bulk88@hotmail.com> | 2012-10-09 05:15:55 -0400 |
---|---|---|
committer | Steve Hay <steve.m.hay@googlemail.com> | 2012-10-10 09:28:50 +0100 |
commit | 624a1c42c1b67cb5d676986900a9d4acab64883c (patch) | |
tree | e84bdcc25b395a88a2fd388e7cd224e3986f2d40 /win32/vmem.h | |
parent | f76b679e8cb2954ffc602508fe1e2a9c562842e0 (diff) | |
download | perl-624a1c42c1b67cb5d676986900a9d4acab64883c.tar.gz |
clean up vmem.h, remove unused instrumentation hooks
Removed virtual. Removed dyn loading msvcrt.dll and function pointers.
Replaced with Compiler's native CRT's malloc. Moved the CS parts
into _USE_LINKED_LIST blocks. There is nothing to protect if we aren't
putting headers on. Faster startup time is the result of this commit.
Before .text be8df .rdata 21171, after .text be88f .rdata 21121. I did
turn off _USE_LINKED_LIST as an experiment, it compiled successfully and
passed the /t/op/*.t tests (only ones I performed). I did not try the Knuth
stuff. See also this msg by Jan Dubois
https://rt.perl.org/rt3/Ticket/Display.html?id=88840#txn-1144384
Diffstat (limited to 'win32/vmem.h')
-rw-r--r-- | win32/vmem.h | 71 |
1 files changed, 30 insertions, 41 deletions
diff --git a/win32/vmem.h b/win32/vmem.h index 460f55793a..8247e4352b 100644 --- a/win32/vmem.h +++ b/win32/vmem.h @@ -69,9 +69,6 @@ inline void MEMODSlx(char *str, long x) * optionaly track by using a doubly linked header */ -typedef void (*LPFREE)(void *block); -typedef void* (*LPMALLOC)(size_t size); -typedef void* (*LPREALLOC)(void *block, size_t size); #ifdef _USE_LINKED_LIST class VMem; typedef struct _MemoryBlockHeader* PMEMORY_BLOCK_HEADER; @@ -87,14 +84,14 @@ class VMem public: VMem(); ~VMem(); - virtual void* Malloc(size_t size); - virtual void* Realloc(void* pMem, size_t size); - virtual void Free(void* pMem); - virtual void GetLock(void); - virtual void FreeLock(void); - virtual int IsLocked(void); - virtual long Release(void); - virtual long AddRef(void); + void* Malloc(size_t size); + void* Realloc(void* pMem, size_t size); + void Free(void* pMem); + void GetLock(void); + void FreeLock(void); + int IsLocked(void); + long Release(void); + long AddRef(void); inline BOOL CreateOk(void) { @@ -121,30 +118,20 @@ protected: } MEMORY_BLOCK_HEADER m_Dummy; + CRITICAL_SECTION m_cs; // access lock #endif long m_lRefCount; // number of current users - CRITICAL_SECTION m_cs; // access lock - HINSTANCE m_hLib; - LPFREE m_pfree; - LPMALLOC m_pmalloc; - LPREALLOC m_prealloc; }; VMem::VMem() { m_lRefCount = 1; - InitializeCriticalSection(&m_cs); #ifdef _USE_LINKED_LIST + InitializeCriticalSection(&m_cs); m_Dummy.pNext = m_Dummy.pPrev = &m_Dummy; m_Dummy.owner = this; #endif - m_hLib = LoadLibrary("msvcrt.dll"); - if (m_hLib) { - m_pfree = (LPFREE)GetProcAddress(m_hLib, "free"); - m_pmalloc = (LPMALLOC)GetProcAddress(m_hLib, "malloc"); - m_prealloc = (LPREALLOC)GetProcAddress(m_hLib, "realloc"); - } } VMem::~VMem(void) @@ -153,17 +140,15 @@ VMem::~VMem(void) while (m_Dummy.pNext != &m_Dummy) { Free(m_Dummy.pNext+1); } -#endif - if (m_hLib) - FreeLibrary(m_hLib); DeleteCriticalSection(&m_cs); +#endif } void* VMem::Malloc(size_t size) { #ifdef _USE_LINKED_LIST GetLock(); - PMEMORY_BLOCK_HEADER ptr = (PMEMORY_BLOCK_HEADER)m_pmalloc(size+sizeof(MEMORY_BLOCK_HEADER)); + PMEMORY_BLOCK_HEADER ptr = (PMEMORY_BLOCK_HEADER)malloc(size+sizeof(MEMORY_BLOCK_HEADER)); if (!ptr) { FreeLock(); return NULL; @@ -172,7 +157,7 @@ void* VMem::Malloc(size_t size) FreeLock(); return (ptr+1); #else - return m_pmalloc(size); + return malloc(size); #endif } @@ -190,7 +175,7 @@ void* VMem::Realloc(void* pMem, size_t size) GetLock(); PMEMORY_BLOCK_HEADER ptr = (PMEMORY_BLOCK_HEADER)(((char*)pMem)-sizeof(MEMORY_BLOCK_HEADER)); UnlinkBlock(ptr); - ptr = (PMEMORY_BLOCK_HEADER)m_prealloc(ptr, size+sizeof(MEMORY_BLOCK_HEADER)); + ptr = (PMEMORY_BLOCK_HEADER)realloc(ptr, size+sizeof(MEMORY_BLOCK_HEADER)); if (!ptr) { FreeLock(); return NULL; @@ -200,7 +185,7 @@ void* VMem::Realloc(void* pMem, size_t size) return (ptr+1); #else - return m_prealloc(pMem, size); + return realloc(pMem, size); #endif } @@ -226,22 +211,26 @@ void VMem::Free(void* pMem) GetLock(); UnlinkBlock(ptr); ptr->owner = NULL; - m_pfree(ptr); + free(ptr); FreeLock(); } -#else - m_pfree(pMem); +#else /*_USE_LINKED_LIST*/ + free(pMem); #endif } void VMem::GetLock(void) { +#ifdef _USE_LINKED_LIST EnterCriticalSection(&m_cs); +#endif } void VMem::FreeLock(void) { +#ifdef _USE_LINKED_LIST LeaveCriticalSection(&m_cs); +#endif } int VMem::IsLocked(void) @@ -413,14 +402,14 @@ class VMem public: VMem(); ~VMem(); - virtual void* Malloc(size_t size); - virtual void* Realloc(void* pMem, size_t size); - virtual void Free(void* pMem); - virtual void GetLock(void); - virtual void FreeLock(void); - virtual int IsLocked(void); - virtual long Release(void); - virtual long AddRef(void); + void* Malloc(size_t size); + void* Realloc(void* pMem, size_t size); + void Free(void* pMem); + void GetLock(void); + void FreeLock(void); + int IsLocked(void); + long Release(void); + long AddRef(void); inline BOOL CreateOk(void) { |