sbrk与brk的使用小例子
sbrk() 和 brk() - Unix的系统函数
sbrk()和brk() 系统的底层会维护一个位置,通过位置的移动完成内存的分配和回收。映射内存时 以一个内存页作为基本单位。
void* sbrk(int increment)
参数是增量
增量为正数时,分配内存
增量为负数时,回收内存
增量为0时,取当前的位置
返回 移动之前的位置(可用内存的首地址),这个返回值对于增量为负数的情况没有意义。
sbrk() 在分配内存时很方便,但在回收内存时比较麻烦;brk()则相反。 ->
开发中,一般用sbrk()分配内存,用brk()回收内存。
brk()的使用方式就是直接传递一个地址过来,做新的位置。
brk()必须和sbrk()结合使用,获得第一个位置。
sbrk()参数为位置,表示从当前位置开始移动多少位.sbrk(0)获取当前位置.
brk()参数也为移动的位置,但是这个位置为从第一个位置开始.
下面是一些帮助理解的小例子:
//brk.c
#include <stdio.h>
#include <unistd.h> int main()
{
int* p = sbrk(0);
brk(p+1);//分配空间
brk(p+100);//分配空间
brk(p+50);//释放空间
brk(p);//全部释放
int* pa = sbrk(4);//分配4bytes
int* pb = sbrk(0);
brk(p+100);//分配396bytes void* p2 = sbrk(4); //404
printf("p=%p\n", p);
printf("p2=%p\n", p2);
printf("end=%p\n", sbrk(0));
//-------------------------------
int* start = sbrk(100);
int* p10 = sbrk(4);
int* p20 = sbrk(4);
//...
brk(start);
}
这里的内存分配感觉有些麻烦,不过释放很轻松.
//sbrk.c
#include <stdio.h>
#include <unistd.h> int main()
{
int* p1 = sbrk(4);//分配4个字节的内存空间
printf("p1=%p\n", p1);
//*(p1+1023) = 1000;
int* p2 = sbrk(4);
int* p3 = sbrk(4);
int* p4 = sbrk(4);
printf("p2=%p\n", p2);
printf("p3=%p\n", p3);
printf("p4=%p\n", p4);
sbrk(-12);//释放12个字节的内存空间
int* cur = sbrk(0);//获取sbrk后台的当前位置
printf("cur=%p\n", cur);
sleep(15);
//sbrk(-4);//再次释放4个字节的内存空间
sbrk(4092+1);
while(1);
}
sbrk分配比较轻松,释放麻烦.
所以我们可以两个结合了使用
#include <stdio.h>
#include <unistd.h>
int main()
{
void* p = sbrk(0); //得到第一个地址
int* p1 = p;
printf("p1=%p\n", p1);
int* p2 = sbrk(4);
int* p3 = sbrk(4);
int* p4 = sbrk(4);
printf("p2=%p\n", p2);
printf("p3=%p\n", p3);
printf("p4=%p\n", p4);
brk(p1+1024);//分配整个页面的空间
brk(p1+512);//释放一半空间
brk(p1);//释放所有空间
}
一个分配,一个释放,分工合作干活不累.
sbrk与brk的使用小例子的更多相关文章
- springmvc入门的第一个小例子
今天我们探讨一下springmvc,由于是初学,所以简单的了解一下 springmvc的流程,后续会持续更新... 由一个小例子来简单的了解一下 springmvc springmvc是spring框 ...
- java即时通信小例子
学习java一段时间了,今天写来一个即时通信的小例子练手在其过程中也学到了一些知识拿出来和大家分享,请路过的各位大神多多赐教... 好了下面讲一下基本的思路: 首先,编写服务器端的程序,简单点说吧就是 ...
- Runtime的几个小例子(含Demo)
一.什么是runtime(也就是所谓的“运行时”,因为是在运行时实现的.) 1.runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数); [runti ...
- bootstrap 模态 modal 小例子
bootstrap 模态 modal 小例子 <html> <head> <meta charset="utf-8" /> <title ...
- INI配置文件分析小例子
随手写个解析INI配置字符串的小例子 带测试 #include <iostream> #include <map> #include <string> #inclu ...
- JavaScript小例子:复选框全选
JavaScript小例子:复选框全选 这只是一个小例子,很简单,但是这个功能还是很常用的: 实现后效果如图: JavaScript代码: <script type="text/jav ...
- 【zTree】 zTree使用的 小例子
使用zTree树不是第一次了 但是 还是翻阅着之前做的 对照着 使用起来比较方便 这里就把小例子列出来 总结一下使用步骤 这样方便下次使用起来方便一点 使用zTree树的步骤: 1.首先 在 ...
- js小例子(标签页)
运用js写的一个小例子,实现点击不同的标签出现不同的内容: <!DOCTYPE html> <html> <head> <meta chaset=" ...
- c# BackGroundWorker 多线程操作的小例子
在我们的程序中,经常会有一些耗时较长的运算,为了保证用户体验,不引起界面不响应,我们一般会采用多线程操作,让耗时操作在后台完成,完成后再进行处理或给出提示,在运行中,也会时时去刷新界面上的进度条等显示 ...
随机推荐
- A trip through the Graphics Pipeline 2011_12 Tessellation
Welcome back! This time, we’ll look into what is perhaps the “poster boy” feature introduced with th ...
- DevExpress GridView对表格的部分说明
1. int[] selects = this.m_grdView1.GetSelectedRows(); // 获取选中的行,可能是几行 2. this.m_grdView1.GetRowCellV ...
- Android BLE 蓝牙低功耗教程,中央BluetoothGatt和周边BluetoothGattServer的实现
http://blog.csdn.net/wave_1102/article/details/39271693 分类: Android(105) 作者同类文章X Android4.3 规范了BLE的A ...
- Android动画设计源码地址
Android动画设计源码地址 http://blog.csdn.net/shanghaibao123/article/details/45223825
- H5页面性能优化
对于一个产品,性能在用户体验中是必不可缺的一环.性能优化是个长远的事情,联想到导航项目,列出以下性能优化的方案: 一. 基本的代码层面优化: 1:合理使用css 1)正确使用Display属性 Dis ...
- ubuntu 常用命令集合版(二)【大侠勿喷,菜鸟欢迎】(转)
原文:http://page.renren.com/600759338/note/729595757 1.shutdown: 关闭系统,如果停留在TTY,请改用halt, poweroff等命令常用参 ...
- Idea 常用快捷键列表
Idea 常用快捷键列表 Alt+回车 导入包,自动修正Ctrl+N 查找类Ctrl+Shift+N 查找文件Ctrl+Alt+L 格式化代码Ctrl+Alt+O 优化导入的类和包Alt+Insert ...
- Velocity(5)——#set指令
引用可以让模板设计者生成动态内容,而指令允许设计者真正的负责页面的展现和内容. 指令是以#开头,后面紧跟一个关键字,比如if,else,foreach等.而这个关键字,是可以被放在{}中间的.这是规范 ...
- java操作MySQL数据库(插入、删除、修改、查询、获取所有行数)
插播一段广告哈:我之前共享了两个自己写的小应用,见这篇博客百度地图开发的两个应用源码共享(Android版),没 想到有人找我来做毕设了,年前交付,时间不是很紧,大概了解了下就接下了,主要用到的就是和 ...
- Android开发新手学习总结(一)——使用Android Studio搭建Android集成开发环境
[新手连载]一:使用Android Studio搭建Android集成开发环境http://bbs.itcast.cn/forum.php?mod=viewthread&tid=87055&a ...