[探究] program break (chatgpt 协助)

news2024/11/17 4:53:25

文章目录

  • 简介
  • Unix早期和程序断点
  • 引入malloc
  • 安全顾虑和转向更新内存分配器
  • 新用法中的程序断点
  • 总结

简介

这里说的程序断点(program break)和 gdb调试时的断点(运行断点),意思不同。

当深入研究Linux和类Unix操作系统的历史时,会遇到一个在内存管理中具有历史意义的术语 - “程序断点”(Program Break)。相应的有brk/sbrk的两个函数,都是调用系统调用brk,来实现修改program break的值,在进程的动态内存分配中扮演着至关重要的角色。但是这个break 已经完全脱离“休息,断点“的概念。其实设置的是程序使用内存的一个最大值(同时还要遵守系统设置的限制)。

Unix早期和程序断点

在Unix的早期,与今天的复杂机制相比,内存管理相对简单。进程的整个地址空间被划分为段,程序断点标记了数据段和堆之间的边界。这个边界是可调整的,这要归功于“sbrk”系统调用。所以如果想追踪program break的出处,是非常困难,不知道是谁第一个写出来的。那就没有什么好办法来更好的理解,了解这个概念了。就只能推测:是从“休息”引申过来的,比如take a break,作为一个名词,当程序的最后一个段终止的时候,就意味着程序在内存中的位置到头了。而brk/sbrk两个函数里的break又变成了动词,或者说成“set break”。

The first edition of the book “The C Programming Language” by Brian Kernighan and Dennis Ritchie, often referred to as the “K&R C,” was published in 1978. This book is an essential reference for C programming, and it discussed memory management and dynamic memory allocation using “malloc” and “free,” which involve the “sbrk” system call. While the term “program break” may not have been explicitly mentioned in the book, the concepts related to it were discussed.

引入malloc

随着编程语言的发展和更高级的函数的出现,动态内存分配变得更加普遍。 "malloc"函数的引入彻底改变了内存管理。 "malloc"允许开发人员动态请求内存,并在幕后与程序断点一起工作,从堆中分配内存。
现代内存分配:随着类Unix操作系统的成熟,需要更复杂的内存管理机制。引入了“mmap”系统调用,提供了更大的内存分配灵活性和效率。这个系统调用允许程序将文件或设备输入/输出映射到内存中,从而实现更高级的内存管理策略。

安全顾虑和转向更新内存分配器

使用“sbrk”进行内存分配并非没有缺陷。它可能导致内存碎片化,更重要的是,暴露进程于基于堆的漏洞。因此,现代内存分配器,如“glibc的malloc”,在“mmap”机制的基础上实施了其逻辑。这个转变提高了内存分配的安全性和性能。

新用法中的程序断点

虽然程序断点的概念在Linux和其他类Unix系统中仍然存在,但它在更高级的内存管理技术取而代之的情况下变得较不常用。 “brk”和“sbrk”现在主要用于系统库和动态链接器的低级内存管理,而不再是应用程序主要的内存分配手段。

总结

程序断点是一个充满历史背景的术语,代表了Unix和Linux世界中内存管理的重要方面。虽然它在早期的内存分配中起到了骨干作用,但已经为更高级和更安全的内存管理方法让路。在现代Linux环境中开发软件时,您更有可能遇到通过“malloc”或其他高级函数进行的内存分配,所有这些都是由内核不断发展的内存管理系统支持的。

理解这个历史背景可以加深您对Linux演变以及如何适应今天软件开发需求的理解。

https://blog.holbertonschool.com/hack-the-virtual-memory-malloc-the-heap-the-program-break/
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1083263.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Node历史版本下载及配置npm镜像

https://nodejs.org/en/download/releases 点击对应版本Release,选择合适的包,进行下载安装。 配置国内镜像 npm config set registry https://registry.npmmirror.com/

1600*C. Game On Leaves(博弈游戏树)

Problem - 1363C - Codeforces 解析: 我们将目标结点 x 当作树的根,显然,到当 x 的度为 1 的时候,此时行动的人胜利。 我们假设现在的情况为,只剩余三个点,再选择任意一个点,则对方获胜。但是两…

VisionMaster自定义模块

一、参考资料: 1、教学视频 2、VM服务管家【VM服务管家】VM4.x算法模块开发_4.3 联合Halcon开发-CSDN博客问题:有的用户在使用VisionMaster软件在开发视觉项目时,可能同时也使用HALCON,OpenCV等视觉算法库做一些图像的处理&#…

js事件循环详解

事件循环简介 JavaScript的事件循环是一种处理异步事件和回调函数的机制,它是在浏览器或Node.js环境中运行,用于管理任务队列和调用栈,以及在适当的时候执行回调函数。 事件循环的基本原理是,JavaScript引擎在空闲时等待事件的到…

【SQL】新建库表时,报错attempt to write a readonly database

目录 1.问题背景 2.问题原因 3.解决方式 4.结果 windows64位 Navicat sql vscode c 1.问题背景 需求是这样: 希望在调用初始化数据库方法时,查看是否有名为【POCT_PROCESS_CONFIG】的数据库表,如果没有就新建 我的数据库格式是这样 …

点击劫持:X-Frame-Options 未配置

前言 X-Frame-Options作为HTTP头的一部分,是一种用于保护网站免受点击劫持攻击的安全措施。网站可以通过设置X-Frame-Options或csp报头来控制网站本身是否可以被嵌套到iframe中。 漏洞描述 Clickjacking(点击劫持)是一种安全漏洞&#xff…

Java项目调用Python脚本(基于idea)

前期准备 1.首先需要在本地环境中安装配置python环境 Python(含PyCharm及配置)下载安装以及简单使用(Idea) 博主本次使用python版本为py3.7.3 2.idea安装python插件 位置:File->Settings->Plugins->python->安装后重启即可 3.引入jython依赖 &l…

jupyter notebook如何实现代码提示功能?

jupyter notebook在数据分析中使用非常方便,但是没有代码提示功能,让人感觉有一点点遗憾?如何实现代码提示功能呢?以下实现亲测有效。 本人python版本是3.8. 首先关闭jupyter notebook,安装相关的库。 一、需要提前…

服务器崩溃前的数据拯救实践

前言 在服务器的VMWARE ESXi系统环境中,我们经常需要创建虚拟机来运行各种应用程序。然而,服务器如果偶尔出现自动重启以及紫屏报错的问题,说明服务器内部出现了故障,一般情况下重启机器能够解决问题,但时间一长&…

《风向》——如何应对互联网变革下的知识焦虑不确定与个人成长

二十多年来,全球电信业发生了翻天覆地的变化。通信技术实现了全面数字化,并且由有线发展到了无线,由铜缆升级到了光缆,由窄带跃迁到了宽带,从“大哥大”换成了智能手机,从打电话扩展到了上网,由…

2024第八届杭州国际智慧城市博览会:建筑与智能,智慧与未来

浙江,中国最具活力的省份之一,将再次迎来一场盛大的智慧城市行业展会。2024年第八届浙江智慧城市博览会,由浙江省土木建筑学会发起主办,以“探索未来,智能引领”为主题,于2024年4月份在美丽的杭州国际博览中…

养老院一键报警的重要性和应用

盾王养老院一键报警的重要性和应用 首先,一键报警装置能够极大地提高养老院的安全性。老年人由于身体机能下降,往往容易成为犯罪分子的目标。而一键报警装置能够在遇到危险情况时,立即向养老院管理人员发送警报,从而及时采取措施…

力扣第501题 二叉树的众数 c++ (暴力 加 双指针优化)

题目 501. 二叉搜索树中的众数 简单 相关标签 树 深度优先搜索 二叉搜索树 二叉树 给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 …

C++入门篇---(1)命名空间与缺省参数

1.前言: c兼容C语言,C是在C的基础之上,容纳进去了面向对象编程思想,并增加了许多有用的库,以及编程范式等。 因此你可以理解为c是在c语言的基础上进行扩展的升级版. 它补充了C语言语法的不足,以及C是如何对C语言设计不合理…

【算法|双指针系列No.6】leetcode LCR 179. 查找总价格为目标值的两个商品

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望…

如何优化前端图像和多媒体资源?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

【Redis】Set集合相关的命令

目录 命令SADDSMEMBERSSISMEMBERSCARDSPOPSMOVESREMSINTERSINTERSTORESUNIONSUNIONSTORESDIFFSDIFFSTORE 命令 SADD 将⼀个或者多个元素添加到set中。注意,重复的元素⽆法添加到set中。 SADD key member [member ...]SMEMBERS 获取⼀个set中的所有元素&#xff0…

【RocketMQ】RocketMQ5.0新特性(一)- Proxy

为了向云原生演进,提高资源利用和弹性能力,RocketMQ在5.0进行了架构的调整与升级,先来看新特性之一,增加了Proxy层。 增加Proxy代理层 计算存储分离 计算存储分离是一种分层架构,将计算层与存储层分开。 计算层指的是…

There was an error committing your changes: File could not be edited

使用github完成commit changes时报的一个错误,最终原因是没有填写Extended description

初学vue,想自己找个中长期小型项目练练手,应该做什么?

前言 可以试着做一两个完整的后台管理项目后再去做其他的,下面推荐一些github上的vue后台管理的项目,可以自己选择性的练一下手 Vue2 1、iview-admin Star: 16.4k 基于 iview组件库开发的一款后台管理系统框架,提供了一系列的强大组件和基…