自己实现一个malloc

昨天阿里校招有这样一道题:

常常会有频繁申请、释放内存的需求,比如在发送网络报文时,每次都要分配内存以存储报文,等报文发送完成后又需要删除报文。
为了避免频繁的new/delete对系统带来的开销,需要实现一个通用的FreeList机制。使用者总是从free list中分配内存,如果存在没有使用的内存块就直接摘出来使用,如果没有的话再从系统中分配。使用完毕后并不去直接delete该内存块,而是交给FreeList保管。
要求:
1. 实现一个对固定大小内存块进行管理的通用FreeList类,给出定义和实现。要求不能使用STL中的容器类。定义类的接口和实现时注意通用性、健壮性和可测试性。
2. 如果该类的对象可能会被多个thread同时访问,请描述如何怎样保证线程安全。有没有办法在保证线程安全的同时尽可能增大并发度?如果有也请描述你的思路。

坑了5、6个小时终于写好了第一问,不过似乎写出来和要求的不太一样。。。(但是是绝对可用的)

Usage:

    MemoryRegion region(1024);
    void * p = region.malloc(512);
    printf("p at %pn",p);
    printf("region available %zdn",region.available());
    region.free(&p);

Git:
#/MemoryRegion/

下载地址:
MemoryRegion

Leave a Reply

Your email address will not be published. Required fields are marked *

14 − 9 =