讨论一内存分配算法

nightfallrove 2004-10-17 10:52:40
实现一个类,构造函数传入一个指针,指向一个预先分配好的内存块,大小已知设为5M,
除了使用一个成员变量来保存该指针外,不可以再使用任何其它成员变量。也就是说所有使用的数据
结构都必须在这5M内存里面调配,我的想法是把五M中的前200K用来管理内存块,记录已分配、未分配
以其它数据。
现在要实现两成员个函数,一个可以从这五M内存中分配指定大小的内存块,给用户使用。
另一个用来释放已分配的内存。
算法的设计目的是提供最快速的算法(会连续分配/释放,平均效率最高),能够分配出最多的内存。
请大家提供思路!
...全文
313 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
huaguli 2004-10-20
看STL的源代码有关内存池(memory pool)的部分
  • 打赏
  • 举报
回复
Visual_Li 2004-10-20
。。
  • 打赏
  • 举报
回复
DentistryDoctor 2004-10-20
看看STL的源代码有关内存池(memory pool)的部分,boost也有memory pool.
  • 打赏
  • 举报
回复
shenailin 2004-10-18
我现在也搞了个二级内存管理!
好烦哦 !
  • 打赏
  • 举报
回复
ywfscu 2004-10-18
我弄了一个,你看看嘛!
#define NULL 0
#define MAXSIZE 1024

typedef double Align;
typedef union header
{
struct { union header * next;
unsigned usedsize;
unsigned freesize;
} s;
Align a ;
}Header ;

static Header mem[MAXSIZE] ;
static Header * memptr = NULL ;

void * malloc (unsigned nbytes)
{
Header * p, *newp ;
unsigned nunits ;
nunits = (nbytes + sizeof (Header) - 1) / sizeof (Header) + 1 ;
if (memptr == NULL)
{
memptr -> s.next = memptr = mem ;
memptr -> s.usedsize = 1 ;
memptr -> s.freesize = MAXSIZE -1 ;
}
for (p = memptr ;
(p->s.next!= memptr) && (p->s.freesize < nunits) ;
p = p->s.next );
if (p->s.freesize < nunits) return NULL ;
newp = p+p->s.usedsize ;
newp->s.usedsize = nunits ;
newp->s.freesize = p->s.freesize - nunits ;
newp->s.next = p->s.next ;
p->s.freesize = 0 ;
p->s.next = newp ;
memptr = newp ;
return (void *) (newp +1) ;
}

void free (void * ap)
{
Header * bp,*p,*prev ;
bp = (Header *) ap - 1 ;
for (prev =memptr ,p=memptr->s.next ;
(p!=bp)&& (p!= memptr); prev=p,p=p->s.next);
if (p!=bp) return ;
prev->s.freesize += p->s.usedsize + p->s.freesize ;
prev->s.next = p->s.next ;
memptr = prev ;
}
  • 打赏
  • 举报
回复
game_zhang 2004-10-18
gz
  • 打赏
  • 举报
回复
freezingfire 2004-10-18
用new (place_address) class_name可以将对象生成在指定地址。
  • 打赏
  • 举报
回复
carylin 2004-10-18
程序好长啊,看不下来,呵呵
  • 打赏
  • 举报
回复
nightfallrove 2004-10-18
static Header mem[MAXSIZE]
、、、、、、、、、、、、、、、、、、、、、
除了记下那个初始地址外不可以再使用全局变量,把这个变量分配在给定的内存里面还差不多
楼上,哪本书里有比较好的算法?
或者网上有、、
  • 打赏
  • 举报
回复
cxjddd 2004-10-18
方法很多,看书是最快的办法:)
  • 打赏
  • 举报
回复
相关推荐
发帖
VC/MFC

1.6w+

社区成员

VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
帖子事件
创建了帖子
2004-10-17 10:52
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……