美文网首页网络通讯编程
2.6、内存管理APIs

2.6、内存管理APIs

作者: 奥斯特洛司机 | 来源:发表于2019-03-23 20:38 被阅读0次

1、增量方式分配虚拟内存(堆内存),一次分配一个页。分配内存超出页的范围则增加新页,超出页的操作会发生段错误。在分配的内存里面使用是安全的,除此之外在1024字节内的写是不稳定的。
#include <unistd.h>
void *sbrk(
intptr_t increment; //内存增量(以字节为单位)
);
返回上一次调用brk/sbrk后的末位地址,失败返回-1.

 increment 取值:
 0 - 获取末尾地址。
 >0 - 增加内存空间
 <0 - 释放内存空间,也是返回上一次调用的末尾地址,全释放就解除映射,访问任何
        地址都会报段错误,这里跟malloc有区别,malloc保留33个页。

内部维护一个指针,
指向当前堆内存最后一个字节的下一个位置。
sbrk函数根据增量参数调整该指针的位置,
同时返回改指针原来的位置。
若发现页耗尽或者空闲,则自动追加或取消页映射。
2.6、内存管理APIs 2.6、内存管理APIs

2、修改虚拟内存块末尾地址

include <unistd.h>

int brk(void* end_data_segment);//内存块末尾地址,sbrk返回的指针在加具体字节数。
成功返回0,失败返回-1

内部维护一个指针,
指向当前堆内存最后一个字节的下一个位置。
brk函数根据指针参数设置该指针的位置。
若发现页耗尽或者空闲,则自动追加或取消页映射。

void* p = sbrk(0); brk(p2=p+4); //因为成功返回0


2.6、内存管理APIs

一般使用sbrk分配内存,释放内存使用brk。。
这样可以做到多次分配,一次释放。


2.6、内存管理APIs

相关文章

网友评论

    本文标题:2.6、内存管理APIs

    本文链接:https://www.haomeiwen.com/subject/pnwsvqtx.html