【发布时间】:2013-01-25 00:57:56
【问题描述】:
我需要找到一种方法来使用 mmap 而不是 malloc。这怎么可能? (我不只使用 libc 系统调用)是的 brk() 是可能的。我使用了 sbrk() 但意识到它不是系统调用...(x86 内联汇编)
我一直在环顾四周,看到了这个:How to use mmap to allocate a memory in heap? 但这对我没有帮助,因为我有一个段错误。
基本上,我只想创建 3 块内存来存储字符。
说,
char * x = malloc(1000);
char * y = malloc(2000);
char * z = malloc(3000);
如何使用 mmap 实现这一点以及以后如何使用 munmap 释放它?
【问题讨论】:
-
kernel.org/doc/man-pages/online/pages/man2/sbrk.2.html 是一个系统调用,但已被弃用。
-
glibc
malloc在适当的情况下使用mmap(例如,如果要分配的字节数超过某个阈值) -
取自 malloc 手册页:通常,malloc() 从堆中分配内存,并根据需要使用 sbrk(2) 调整堆的大小。当分配大于 MMAP_THRESHOLD 字节的内存块时,glibc malloc() 实现使用 mmap(2) 将内存分配为私有匿名映射。 MAP_THRESHOLD 默认为 128 kB,但可以使用 mallopt(3) 进行调整。使用 mmap(2) 执行的分配不受 RLIMIT_DATA 资源限制的影响(请参阅 getrlimit(2))。
-
你怎么不用libc? mmap 和 malloc 是 libc 调用。
-
@LtWorf:
malloc确实是一个标准的libc函数,但mmap是一个系统调用,可以在没有任何库的情况下调用......就像Flexo 的答案所示...... .
标签: c assembly x86 malloc mmap