-
Notifications
You must be signed in to change notification settings - Fork 0
/
MemoryManager.h
78 lines (60 loc) · 1.67 KB
/
MemoryManager.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
//
// Created by lk234 on 2020/10/22 022.
//
#include <iostream>
/*
* 内存不足时异常处理
*/
#include "MemoryBadAlloc.h"
#include <thread>
#ifndef GARBAGE_COLLECTION_MEMORY_MANAGER_H
#define GARBAGE_COLLECTION_MEMORY_MANAGER_H
/*
* Memory Manage可以使用的内存
*/
#define MEMORY_SIZE 256
/*
* 内存中存有的最大对象数量
*/
#define MAX_OBJECT 256
/*
* 匿名结构体MemoryStruct
* 维护对象大小及指针列表
*/
typedef struct {
void * list[MAX_OBJECT]; // 对象指针
size_t listPreSize[MAX_OBJECT]; // 对象大小
bool mark[MAX_OBJECT];
size_t listIndex; // 下标
}MemoryStruct;
class MemoryManager {
public:
void* operator new(size_t size);
void operator delete(void *pointer) noexcept;
static void init();
static MemoryManager* getInstance();
static void memoryTrim();
static void toMark(void *pointer); //即管理列表中的内存地址为空(手动delete)
static void markClear();
static void markCompress();
static void swap(size_t front, size_t tail);
// static void getAllObjPointer();
static void deleteInstance();
private:
static MemoryManager *memoryManager;
static size_t memorySize_;
static void * Memory_;
/*
* 偏移量:已利用内存累积(在memory_下的一个 "表明占用情况" 的指针)
* Stack pointer rsp
*/
static size_t lastPointer_;
static MemoryStruct memoryStruct_;
static std::thread *memoryTrimThread;
static int THREAD_KILL;
/*
* 锁: 将对memoryStruct_和lastPointer_、Memory_的操作视为一个原子操作
*/
static int LOCK_;
};
#endif // GARBAGE_COLLECTION_MEMORY_MANAGER_H