当前位置: 首页 > news >正文

Unix系统编程()brk,sbrk


在堆上分配内存

进程可以通过增加堆的大小来分配内存,所谓堆是一段长度可变的连续虚拟内存,始于进程的未初始化数据段末尾,随着内存的分配和释放而增减。通常将堆的当前内存边界称为"program break"。

下面也会学习一族函数brk,sbrk和malloc。

调整program break:brk和sbrk

改变堆的大小(即分配或释放内存),其实就像命令内核改变进程的program break位置一样简单。最初,program break正好位于未初始化数据段末尾之后(和&end位置相同)。

在program break的位置抬升后,程序可以访问新分配区域内的任何内存地址,而此时物理内存页尚未分配。内核会在进程首次试图访问这些虚拟内存地址时自动分配新的物理内存页。

传统的UNIX系统虽然提供了两个操纵program break的系统调用:brk和sbrk,在Linux中依然可以用。虽然代码很少直接使用这些系统调用,但了解它们有助于弄清内存分配的工作过程。

int brk(void *end_data_segment);
void *sbrk(intptr_t increment);

系统调用brk会将program break设置为参数end_data_segment所指定的位置。由于虚拟内存页以页为单位进行分配,end_data_segment实际会四舍五入到下一个内存页的边界处。

当试图将program break设置为一个低于其初始值(即低于&end)的位置时,有可能会导致无法预知的行为,例如,当程序试图访问的数据位于初始化或未初始化数据段中当前尚不存在的部分时,就会引发段内存访问错误(segmentation default)(SIGSEGV信号)。

program break可以设定的精确上限取决于一系列因素。

转载于:https://www.cnblogs.com/tuhooo/p/8674483.html

相关文章:

  • linux audit审计(2)--audit启动
  • 完美洗牌算法
  • STL::sort函数实现
  • Android中Activity和Service的数据通讯
  • X-Forwarded-For 和 X-Real-IP 的区别?
  • python的列表生成式
  • Angular2.0的学习(三)
  • 程序员如何利用空闲时间挣零花钱
  • MariaDB/MySQL存储过程和函数
  • python基本数据类型——列表
  • 第五周课后作业
  • Java 笔记 —— java 和 javac
  • python中的replace无法替换字符串
  • 系统利益相关者描述案例(河创)
  • JavaScript高级程序设计学习笔记2
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 2017年终总结、随想
  • C学习-枚举(九)
  • Git 使用集
  • iOS小技巧之UIImagePickerController实现头像选择
  • SpringBoot 实战 (三) | 配置文件详解
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • windows下mongoDB的环境配置
  • 机器学习 vs. 深度学习
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 爬虫模拟登陆 SegmentFault
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 源码安装memcached和php memcache扩展
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • # 达梦数据库知识点
  • #考研#计算机文化知识1(局域网及网络互联)
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (52)只出现一次的数字III
  • (C++17) std算法之执行策略 execution
  • (第二周)效能测试
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (一)Java算法:二分查找
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)http-server应用
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET/C# 使窗口永不获得焦点
  • .Net7 环境安装配置
  • .Net8 Blazor 尝鲜
  • @Autowired多个相同类型bean装配问题
  • @Conditional注解详解
  • @reference注解_Dubbo配置参考手册之dubbo:reference
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [Android学习笔记]ScrollView的使用
  • [APIO2012] 派遣 dispatching
  • [AX]AX2012 SSRS报表Drill through action