brk和sbrk的虚拟内存的管理

本文详细介绍了sbrk和brk函数在内存管理中的应用,包括如何通过sbrk动态分配内存,以及如何利用brk直接修改内存访问范围的末尾地址,同时提供了实例代码演示其在栈操作中的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

void *sbrk(int size)
-size = 0 返回sbrk/brk 上次的末尾地址
-size > 0 分配内存空间,返回上一次末尾地址
-size < 0 释放空间


int brk(void *ptr)
 -直接修改访问的有效范围的末尾地址
 -释放空间形成一个完整的page,则该页映射被解除
 - 返回
  0 返回成功 -1 失败 

注意:  sbrk 是在开辟空间时比较方便

               brk 是在释放空间时比较方便


#include <stdio.h>
#include <unistd.h>
int *begin = NULL;
void init(void){
   begin = (int *)sbrk(0);    
}
void push(int data){    //压栈操作
    *(int *) sbrk(sizeof(int)) = data;
}
void pop(void){         //出栈
   sbrk(-sizeof(int));
}
int top(void){          // 返回最大值
     return   *((int *)sbrk(0) - 1);
}
int empty(void){       //判断是否为空
    if (begin == sbrk(0)){
	   return 1;	
	}	
	else{
	   return 0;
	}
}
void deinit(){
   brk(begin);
}
int main(void)
{
	init();
    int i;
	for (i = 1; i < 10; ++i){ 
	    push(i);
	}
	for (i = 1; i < 10; ++i){
	    printf("%d ",top());
		pop();
	}
	printf("\n");
	if (empty()){
	   printf("The stack is empty.\n");
	}
	else {
	   printf("The stack is not empty.\n");
	}
	deinit();
	return 0;
}















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值