我被赋予了动态管理内存以超越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吗?
感谢您的帮助!
答案 0 :(得分:5)
您可以使用系统调用实现您自己的'malloc'版本以进行进程内存管理... 尝试brk,sbrk和mmap系统调用以从内核获取内存...
这有一个易于理解的实现,您可以在
上实现和改进答案 1 :(得分:1)
否,C中不支持new
,将指针设置为null不会释放关联的内存。事实上,这是泄漏记忆的好方法。
这取决于你要做的事情的详细信息,但通常你会初次调用malloc()
以获得一个较大的内存块,然后编写你使用的自定义函数管理程序中该大块的分配。
如果您根本不想使用malloc()
,则必须为您的操作系统使用一个内存分配调用。例如,在Windows下,您可以拨打HeapAlloc()
或GlobalAlloc()
。在UNIX系统上,您可以调用brk()
或sbrk()
。