内存控制brk和sbrk

内存控制brk和sbrk


比malloc更底层的内存控制,适合“内存空间大小不定”的场景,效率比malloc更高

函数原型

#include <unistd.h>
int brk(void *addr);
void *sbrk(intptr_t increment);

相关概念:通常将内存边界称为 program break 程序段
  在program break的位置抬升后,程序可以访问新分配区域内的任何内存地址,而此时物理内存页尚未分配
  内核会在进程首次试图访问这些虚拟内存地址时自动分配新的物理内存页

背景:brk和sbrk维护着同一个指针

sbrk工作过程描述:
  1.先判断系统中的指针是否为NULL,为NULL,则找到一个空闲的首地址,赋予给他,并将该地址返回,若不为NULL,则直接将该地址返回
  2.判断sbrk传入的参数,是否存在,如果没有,则映射一个页,在页中分配size个字节
  3.同时将首地址+size,赋予给内部指针,通过内部指针来维护他
*
具体作用*:
 brk:分配空间,释放空间,对参数中 addr 做绝对位置调整,调动指针左右移动,左移-释放空间,右移-分配空间
   即将内存页的末尾移动到 addr 指针指向的位置
 sbrk:以当前位置为开始,将内存页的位置移动increment个偏移量

返回值:
  如果成功,brk返回0,sbrk返回一个指针
  如果失败,brk返回-1,sbrk返回一个 (void*)-1,即也是-1

示例代码


    #include<unistd.h>
    #include<stdio.h>
    
    int isprimer(int a<
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值