12.3. 使用 mmap ()系统调用将文件或设备映射到内存中
对于实时系统中的大型内存分配,内存分配(malloc)方法使用 mmap () 系统调用来查找内存空间。您可以通过在 flags 参数中设置 MAP_LOCKED 来分配和锁定内存区域。因为 mmap () 以页为基础分配内存,因此它会避免在同一页面中出现两个锁定,这样可防止双锁或单解锁问题。
先决条件
- 您在系统上具有 root 权限。
流程
映射特定的 process-address 空间:
#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 ()函数成功完成时,它会将指针返回到映射区域。出错时,它会返回MAP_FAILED值,并设置errno来指示错误。 -
当
munmap ()函数成功完成时,它返回0。出错时,它会返回-1,并设置errno来指示错误。