12.4. 使用 mmap ()系统调用将文件或设备映射到内存
对于实时系统上的大型内存分配,内存分配(malloc)方法使用 mmap () 系统调用来查找可寻址的内存空间。您可以通过在 标志 参数中设置 MAP_LOCKED 来分配和锁定内存区域。
作为 mmap() 根据页分配内存,同一页面中没有两个锁定,这可以防止双锁定或单一锁定问题。
先决条件
- 有 root 权限。
流程
映射特定进程地址空间:
#include <sys/mman.h> #include <stdlib.h> void *alloc_workbuf(size_t size) { void *ptr; ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_LOCKED, -1, 0); if (ptr == MAP_FAILED) return NULL; return ptr; } void free_workbuf(void *ptr, size_t size) { munmap(ptr, size); }
验证
-
在成功时,实时
mmap ()调用会返回一个指向映射区域的指针。0n 错误,它会返回MAP_FAILED值,并设置errno来指示错误。 -
当成功时,实时
munmap ()调用会返回 0。0n 错误,它返回 -1 并设置errno来指明错误。