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;
}

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

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



