From 8fc23a3bb9f49e88478a2505fa7dee434ec50c16 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期四, 18 一月 2024 14:31:38 +0800
Subject: [PATCH] less memory
---
src/shm/mm.cpp | 50 +++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 45 insertions(+), 5 deletions(-)
diff --git a/src/shm/mm.cpp b/src/shm/mm.cpp
index 5837906..bcfc1a7 100644
--- a/src/shm/mm.cpp
+++ b/src/shm/mm.cpp
@@ -3,6 +3,8 @@
*/
#include "mm.h"
#include "sem_util.h"
+#include "hashtable.h"
+#include "key_def.h"
#include "logger_factory.h"
#include "bh_api.h"
#include <sys/sem.h>
@@ -62,8 +64,6 @@
#define PREV_FBLKP(bp) (*PREDRP(bp))
/* $end mallocmacros */
-
-
// #define MAX_HEAP (512*(1<<20)) /* 20 MB */
#define MAX_HEAP (512) /* 20 MB */
@@ -138,8 +138,11 @@
*/
void mm_free(void *ptr, int enable)
{
- if ((ptr == 0) || (*(size_t *)(ptr - SIZE_T_SIZE) == 0x00))
- return;
+ if (ptr == 0)
+ return;
+
+ if (check_mm_valid(ptr) == false)
+ return;
/*
*if (!is_allocated(ptr) ) {
@@ -494,7 +497,7 @@
}
*(size_t *)bp = inter_key_get();
-
+
return (bp + SIZE_T_SIZE);
}
@@ -524,6 +527,10 @@
{
void *bp = heap_listp;
+ unsigned int diff;
+ struct timeval start, end;
+
+ gettimeofday(&start, NULL);
SemUtil::dec(mutex);
for (bp = heap_listp; GET_SIZE(HDRP(bp)) > 0; bp = NEXT_BLKP(bp))
{
@@ -532,10 +539,33 @@
mm_free(bp + SIZE_T_SIZE, false);
}
}
+
+ gettimeofday(&end, NULL);
+
+ diff = end.tv_sec - start.tv_sec;
+ if (diff >= TIME_DUR)
+ break;
}
SemUtil::inc(mutex);
return;
+}
+
+int check_mm_valid(void *bp)
+{
+ int val;
+
+ if ((bp >= mem_start_brk) && (bp <= mem_max_addr) && (GET_ALLOC(HDRP(bp - SIZE_T_SIZE)))) {
+
+ val = *(size_t *)(bp - SIZE_T_SIZE);
+ if ((val >= START_KEY) || (val == SHM_BUS_KEY)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ return false;
}
/*
@@ -544,7 +574,10 @@
static void *find_fit(size_t size)
{
void *bp;
+ unsigned int diff;
+ struct timeval start, end;
+ gettimeofday(&start, NULL);
for (bp = NEXT_FBLKP(heap_listp); bp != heap_listp; bp = NEXT_FBLKP(bp))
{
if (!GET_ALLOC(HDRP(bp)) && (size <= GET_SIZE(HDRP(bp))))
@@ -554,7 +587,14 @@
{
break;
}
+
+ gettimeofday(&end, NULL);
+
+ diff = end.tv_sec - start.tv_sec;
+ if (diff >= TIME_DUR)
+ break;
}
+
return NULL; /* No fit */
}
--
Gitblit v1.8.0