From 0231dc08ab554b593769d0b2dd410bd8ad3ee7dc Mon Sep 17 00:00:00 2001 From: cxl Date: Fri, 28 Jun 2019 06:45:29 +0000 Subject: [PATCH] Core: HEAPLOG flag git-svn-id: svn://ultimatepp.org/upp/trunk@13452 f0d560ea-af0d-0410-9eb7-867de7ffcac7 --- uppsrc/Core/HeapImp.h | 9 ++++++--- uppsrc/Core/sheap.cpp | 28 ++++++++++++++++++++++++++++ uppsrc/ide/ide.upp | 3 ++- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/uppsrc/Core/HeapImp.h b/uppsrc/Core/HeapImp.h index 7dd3f0ca7..5bd0468f7 100644 --- a/uppsrc/Core/HeapImp.h +++ b/uppsrc/Core/HeapImp.h @@ -264,7 +264,7 @@ struct HugeHeapDetail { struct Heap : BlkHeap { enum { LUNIT = 256, // granularity of large blocks (size always a multiple of this) - LPAGE = 255, // number of LUNITs in large page + LPAGE = LUNIT - 1, // number of LUNITs in large page LOFFSET = 64, // offset from 64KB start to the first block header NKLASS = 23, // number of small size classes @@ -343,8 +343,8 @@ struct Heap : BlkHeap { }; static int lclass[]; - static int free_lclass[LPAGE + 1]; - static int alloc_lclass[LPAGE + 1]; + static int free_lclass[256]; + static int alloc_lclass[256]; static_assert(sizeof(BlkPrefix) == 16, "Wrong sizeof(BlkPrefix)"); static_assert(sizeof(DLink) == 64, "Wrong sizeof(DLink)"); @@ -457,6 +457,9 @@ struct Heap : BlkHeap { void Shutdown(); static void AuxFinalCheck(); +#ifdef flagHEAPLOG + void *AllocSz0(size_t& sz); +#endif void *AllocSz(size_t& sz); void Free(void *ptr); size_t GetBlockSize(void *ptr); diff --git a/uppsrc/Core/sheap.cpp b/uppsrc/Core/sheap.cpp index 9f580bcdd..f4093ee2c 100644 --- a/uppsrc/Core/sheap.cpp +++ b/uppsrc/Core/sheap.cpp @@ -128,6 +128,12 @@ void *Heap::Allok(int k) return DbgFreeCheckK(AllocK(k), k); } +#ifdef flagHEAPLOG + +#define AllocSz AllocSz0 + +#endif + force_inline void *Heap::AllocSz(size_t& sz) { @@ -164,6 +170,24 @@ void *Heap::AllocSz(size_t& sz) return LAlloc(sz); } +#ifdef flagHEAPLOG + +#undef AllocSz + +static FILE *sLog = fopen(GetExeDirFile("heap.log"), "w"); + +force_inline +void *Heap::AllocSz(size_t& sz) +{ + size_t sz0 = sz; + void *ptr = AllocSz0(sz); + if(sLog) + fprintf(sLog, "%X %zX %p\n", Thread::GetCurrentId(), sz, ptr); + return ptr; +} + +#endif + force_inline void Heap::FreeK(void *ptr, Page *page, int k) { @@ -228,6 +252,10 @@ void Heap::Free(void *ptr, Page *page, int k) force_inline void Heap::Free(void *ptr) { +#ifdef flagHEAPLOG + if(sLog) + fprintf(sLog, "%p\n", ptr); +#endif if(!ptr) return; LLOG("Free " << ptr); if(IsSmall(ptr)) { diff --git a/uppsrc/ide/ide.upp b/uppsrc/ide/ide.upp index 0979ad5da..0156d1c96 100644 --- a/uppsrc/ide/ide.upp +++ b/uppsrc/ide/ide.upp @@ -125,7 +125,8 @@ mainconfig "" = "GUI MT NOGTK", "" = "GUI NOGTK", "" = "GUI MT TEST_HIDPI", - "" = "GUI PEAKMEM"; + "" = "GUI PEAKMEM", + "" = "GUI HEAPLOG"; custom() "", "ASDFASDFASDF",