1 sbrk()/brk()
sbrk()/brk()底层都维护了一个位置
sbrk(increment)
当 increment 为正时,位置向后移动increment字节,同时返回移动之前的位置,相当于分配内存。
当 increment 为负时,位置向前移动increment字节,相当于释放内存,其返回值没有实际意义。
当 increment 为零时,不移动位置,只返回当前位置。
sbrk.c
#include <stdio.h>
#include <unistd.h>
int main(){
void* p1 = sbrk(4);//分配4字节内存
void* p2 = sbrk(4);//映射了一个内存页
void* p3 = sbrk(4);
void* p4 = sbrk(4);
printf("p1=%p,p2=%p,p3=%p,p4=%p\n",p1,p2,p3,p4);
sbrk(-4);//释放4字节
sbrk(-8);
void* cur = sbrk(0);//返回当前位置
printf("cur=%p\n",cur);
printf("pid=%d\n",getpid());
sbrk(4093);//4093+4 = 4097字节,超了
print