内存
基本概念
内存管理是开发过程中必须要关注的重要过程,它包括内存的分配、使用和回收。
良好的内存管理对于提高软件性能和可靠性有着十分重要的意义。
使用场景
针对用户态开发,OpenHarmony内存提供了一套内存系统调用接口,支持内存的申请释放、重映射、内存属性的设置等,还有C库的标准内存操作函数。
功能
表 1 标准C库相关接口
拷贝src 所指的内存内容前n 个字节到dest 所指的地址上。复制时检查参数c 是否出现,若是则返回dest 中值为c 的下一个字节地址。 |
||
void memmem(const void haystack, size_t haystacklen, const void needle, size_t needlelen) |
||
差异接口详细说明:
mmap
函数原型:
void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);
函数功能:申请虚拟内存。
参数说明:
说明: mmap与Linux实现差异详见与Linux标准库的差异章节。
返回值:
- 成功返回:虚拟内存地址,这地址是页对齐。
- 失败返回:(void *)-1。
munmap接口
函数原型:
int munmap(void *addr, size_t length);
函数功能:释放虚拟内存。
参数说明:
返回值:
- 成功返回0。
- 失败返回-1。
mprotect接口
函数原型:
int mprotect(void *addr, size_t length, int prot);
函数功能:修改内存段的访问权限。
参数说明:
- PROT_READ:允许读该内存段。
- PROT_WRITE:允许写该内存段。
- PROT_EXEC:允许执行该内存段。
- PROT_NONE:不能访问。
返回值:
- 成功返回0。
- 失败返回-1。
mremap接口
函数原型:
void *mremap(void *old_address, size_t old_size, size_t new_size, int flags, void new_address);
函数功能:重新映射虚拟内存地址。
参数说明:
- MREMAP_MAYMOVE:允许内核将映射重定位到新的虚拟地址。
- MREMAP_FIXED:mremap()接受第五个参数,void *new_address,该参数指定映射地址必须页对齐;在new_address和new_size指定的地址范围内的所有先前映射都被解除映射。如果指定了MREMAP_FIXED,还必须指定MREMAP_MAYMOVE。
返回值:
- 成功返回:重新映射后的虚拟内存地址。
- 失败返回:((void *)-1)。