内存映射与文件I/O的高级操作详解
1. mremap()与realloc()的应用
在内存管理中, mremap() 函数常被用于实现高效的 realloc() 。例如:
void * realloc (void *addr, size_t len)
{
size_t old_size = look_up_mapping_size (addr);
void *p;
p = mremap (addr, old_size, len, MREMAP_MAYMOVE);
if (p == MAP_FAILED)
return NULL;
return p;
}
不过,此实现仅在所有 malloc() 分配都是唯一的匿名映射时才有效。在使用 mremap() 时,可能会遇到一些错误:
- EAGAIN :内存区域被锁定,无法调整大小。
- EFAULT :给定范围内的某些页面不是进程地址空间中的有效页面,或者重新映射给定页面时出现问题。
- EINVAL :参数无效。
- ENOMEM :给定范围在不移动的情况下无法扩展(且未指定 MREMAP_MAYMOVE ),或者进程
超级会员免费看
订阅专栏 解锁全文
1003

被折叠的 条评论
为什么被折叠?



