内存映射与文件I/O的高级操作
1. 内存重映射与错误处理
在进行内存操作时, mremap() 函数常被用于实现高效的 realloc() 功能。不过,在使用过程中可能会遇到一些错误情况:
- EAGAIN :内存区域被锁定,无法调整大小。
- EFAULT :给定范围内的某些页面不是进程地址空间中的有效页面,或者重新映射页面时出现问题。
- EINVAL :参数无效。
- ENOMEM :给定范围无法在不移动的情况下扩展(且未指定 MREMAP_MAYMOVE ),或者进程地址空间中没有足够的空闲空间。
以下是使用 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;
}
此示例假设 libc
超级会员免费看
订阅专栏 解锁全文

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



