动态分配没有Malloc的内存

时间:2013-11-08 19:45:50

标签: c memory-management operating-system

我被赋予了动态管理内存以超越malloc速度的任务。一些要求:

1)有一个指向结构的指针

2)使用记忆的“大块”

3)将通过类似

的调用分配内存
init(memory * mem, int chunk_size, int num_chunks)

4)内存指针将全局声明。

5)不使用系统调用

所以,我只考虑过我的结构:

typdef struct {
  char *byte;
} memory;

然后这将使我的init函数执行以下操作:

mem = new memory[chunk_size * num_chunks];

我不知道你是否可以在C中做到这一点 - 通常我会使用malloc!然后自由我能够将指针设置为null吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

您可以使用系统调用实现您自己的'malloc'版本以进行进程内存管理... 尝试brk,sbrk和mmap系统调用以从内核获取内存...

这有一个易于理解的实现,您可以在

上实现和改进

http://www.inf.udec.cl/~leo/Malloc_tutorial.pdf

答案 1 :(得分:1)

否,C中不支持new,将指针设置为null不会释放关联的内存。事实上,这是泄漏记忆的好方法。

这取决于你要做的事情的详细信息,但通常你会初次调用malloc()以获得一个较大的内存块,然后编写你使用的自定义函数管理程序中该大块的分配。

如果您根本不想使用malloc(),则必须为您的操作系统使用一个内存分配调用。例如,在Windows下,您可以拨打HeapAlloc()GlobalAlloc()。在UNIX系统上,您可以调用brk()sbrk()