__________________________________________
#include "mempool.h"
#include <stdio.h>
int main() {
MemPool* pool = open_pool()//这个链表储存了所有指针信息。
char* str =NEW_STR(pool, 1024)//申请内存空间,并在pool中记录。
scanf("%s", str)printf("%s\n",str)
close_pool(pool)//释放所有申请的空间
return 0}
__________________________________________
#include <stdlib.h>
struct _MEM_TABLE_ {
void * pointer
struct _MEM_TABLE_* next
}
typedef struct _MEM_TABLE_ MemPool
typedef void (*FUNC_POOL_EACH)(MemPool*)
MemPool* open_pool(void)
void close_pool(MemPool*)
MemPool* __pool_bottom(const MemPool*)
void __pool_for_each(MemPool*, FUNC_POOL_EACH)
void __pool_alloc_memset(void*,size_t)
void* alloc_pool(MemPool*, size_t)
void delloc_pool(MemPool*, void*)
#define NEW_STR(pPool,len) ((char*)alloc_pool((pPool),(len)))
#define NEW_INT(pPool) ((int*)alloc_pool((pPool),sizeof(int)))
#define NEW_DOUBLE(pPool) ((double*)alloc_pool((pPool),sizeof(double)))
#define NEW_FLOAT(pPool) ((float*)alloc_pool((pPool),sizeof(float)))
#define NEW_TYPE(pPool, tType) ((tType*)alloc_pool((pPool),sizeof(tType)))
#define DELETE(pPool,p) (delloc_pool((pPool),(p)))
MemPool* open_pool(void) {
MemPool* p = malloc(sizeof(MemPool))
if (p != NULL) {
p->pointer = NULL
p->next = NULL
}
return p
}
void close_pool(MemPool* p) {
MemPool* now = p, *tmp
while (now != NULL) {
tmp = now
now = now->next
if (tmp->pointer != NULL) {
free(tmp->pointer)
}
free(tmp)
}
}
void __pool_alloc_memset(void* p, size_t len) {
size_t i
for (i = 0i <leni++) {
*((char*)(p+i)) = '\0'
}
}
MemPool* __pool_bottom(const MemPool* p) {
MemPool* tmp = (MemPool*)p
if (p == NULL) return NULL
while (tmp != NULL) {
if (tmp->next == NULL) {
break
} else {
tmp = tmp->next
}
}
return tmp
}
void __pool_for_each(MemPool* pool, FUNC_POOL_EACH func) {
MemPool *now = pool, *tmp
while(now != NULL) {
tmp = now
now = now->next
(*func)(tmp)
}
}
void* alloc_pool(MemPool* p, size_t l) {
MemPool *tmp = __pool_bottom(p), *pnew
if (tmp == NULL) return NULL
pnew = malloc(sizeof(MemPool))
if (pnew == NULL) return NULL
pnew->next = NULL
pnew->pointer = malloc(l)
__pool_alloc_memset(pnew->pointer, l)
tmp->next = pnew
return pnew->pointer
}
void delloc_pool(MemPool* pool, void * p) {
MemPool *now = pool, *parent
if (p == NULL) {
return
}
for(parent = nownow != NULLparent=now, now = now->next) {
if (p == now->pointer) {
parent->next = now->next
free(now->pointer)
free(now)
}
}
}
自动托管即系统根据用户硬盘使用情况,将虚拟内存动态的设置在各个硬盘分区中,避免了在某个分区中大量占用的现象。 操作方法如下:
1、首先打开操作系统点击【内存】管理。
2、点击【内存】可以查看当前内存的可用状态,很明显有一部分未被使用,点击此窗口下面的【未托管】。
3、确认要使用未托管的内存,点击【配置】开启未被使用的部分。
4、选中【启用未托管内存的使用】,同时也下面的选项选择。
5、点击确定后,未托管空间能够被软件识别。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)