在Assembly中动态分配内存?

时间:2017-10-20 06:57:52

标签: linux assembly memory-management

如果我想分配一个未知大小的内存的动态部分,或者说在运行时已知的大小,在用户输入他想要分配的兆字节数后,例如,最好的方法是什么?去做?它是否从C中调用“malloc”,要求操作系统为我这样做?或者,还有更好的方法? 通常如何做?

请注意,我不想保留

2 个答案:

答案 0 :(得分:1)

另一种方法是尽可能大地定义静态数组并编写自己的malloc / free子例程。特别是如果没有多线程或其他类型的分配块的共享使用,这很简单。保留第一个空块的地址,并在每个块的开头存储块的大小和下一个空块的地址。

PS:分配(保留)块也包含块大小作为前缀。这里不使用下一个块的地址,可以将0作为“保留”存储器的标志。更简单的解决方案是只有块大小和标记free / used_block,但是这样你必须扫描多个保留块,直到达到比只有一个空闲块链慢的空闲块。

答案 1 :(得分:1)

mmap2和brk系统调用是在汇编中执行此操作的最简单方法。 mmap2系统调用在汇编中使用起来比较困难,但如果需要大量动态分配的内存,这就是你要做的。 brk易于使用,它可以通过移动"程序中断" (程序存储空间的边界)有效地为程序分配更多内存。如果您需要少量动态内存(例如,少于整页),则可以采用此方法。