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字节,超了
printf(

本文深入探讨了内存管理中的sbrk()和brk()函数,它们用于动态内存分配,sbrk()方便分配,brk()利于释放。此外,还介绍了mmap()和munmap(),它们提供更高级的内存映射功能,并讨论了如何使用这些函数来管理内存,特别是在存储结构化数据如员工信息时。最后,提到了系统调用的概念及其对程序性能的影响。
最低0.47元/天 解锁文章
793

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



