Core: HEAPLOG flag

git-svn-id: svn://ultimatepp.org/upp/trunk@13452 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2019-06-28 06:45:29 +00:00
parent 1746865578
commit 0231dc08ab
3 changed files with 36 additions and 4 deletions

View file

@ -264,7 +264,7 @@ struct HugeHeapDetail {
struct Heap : BlkHeap<HugeHeapDetail, 4096> {
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<HugeHeapDetail, 4096> {
};
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<HugeHeapDetail, 4096> {
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);

View file

@ -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)) {

View file

@ -125,7 +125,8 @@ mainconfig
"" = "GUI MT NOGTK",
"" = "GUI NOGTK",
"" = "GUI MT TEST_HIDPI",
"" = "GUI PEAKMEM";
"" = "GUI PEAKMEM",
"" = "GUI HEAPLOG";
custom() "",
"ASDFASDFASDF",