3

我的任务是动态管理内存以超越 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!然后释放我是否能够将指针设置为空?

谢谢您的帮助!

4

2 回答 2

6

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

这有一个易于理解的实现,您可以实现和改进

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

于 2013-11-08T19:53:50.913 回答
1

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

这取决于您尝试执行的操作的详细信息,但通常您会进行一些初始调用以malloc()获取较大的内存块,然后编写自定义函数,用于管理该大块中的分配你的程序。

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

于 2013-11-08T19:55:26.430 回答