49-Linux_malloc及4G虚拟空间分布

文章目录

  • malloc及4G虚拟空间分布
    • 1.malloc
    • 2.32位操作系统进程的4G虚拟空间分布
      • 1) 代码区(Text egment):
      • 2) 全局初始化数据区/静态数据区(Data Segment)
      • 3) 未初始化数据区(BSS):
      • 4) 堆区(heap):
      • 5) 栈区(stack):

malloc及4G虚拟空间分布

1.malloc

1.进程在执行的过程中,malloc申请空间,不使用时,没有free就会出现内存泄漏;
如果进程结束了,那么所有向操作系统申请的内存都会被回放(释放);
2.申请1G或者更大空间,到底能不能成功?
如果当前的物理内存剩余空间够用,那么申请的空间肯定能成功;
如果物理内存不够,先看有没有虚拟内存,如果有,看虚拟内存加上物理内存能否满足申
请的空间大小;

sudo swapoff -a;关闭虚拟内存;
sudo swapon -a;开启虚拟内存;

3.父进程堆区申请的空间复制后,子进程也有一份.
也需要释放;
fork会把进程的上下文都复制一遍,如果是malloc申请的话,
内核会给子进程分配和父进程一样多的空间,父子进程都需要分别free;

2.32位操作系统进程的4G虚拟空间分布

在这里插入图片描述

1) 代码区(Text egment):

代码区指令根据程序设计流程依次执行,对于顺序指令,则只会执行一次(每个进程),如果反复,则需要使用跳转指令,如果进行递归,则需要借助栈来实现。

代码段: 代码段(code segment/textsegment )通常是指用来存放程序执行代码的一块内存区域。 这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序 在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

代码区的指令中包括操作码和要操作的对象(或对象地址引用)。如果是立即数(即具体的 数值,如5),将直接包含在代码中;如果是局部数据,将在栈区分配空间,然后引用该数据地址;如果是BSS区和数据区 在代码中同样将引用该数据地址。另外,代码段还规划了局部数据所申请的内存空间信息。

2) 全局初始化数据区/静态数据区(Data Segment)

只初始化一次。

数据段: 数据段(data segment )通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。

data段中的静态数据区存放的是程序中已初始化的全局变量、静态变量和常量。

3) 未初始化数据区(BSS):

在运行时改变其值。

BSS 段: BSS 段(bss segment )通常是指用来存放程序中未初始化的全局变量的一块内存区域。BSS 是英文Block Started by Symbol 的简称。

BSS 段属于静态内存分配, 即程序一开始就将其清零了。一般在初始化时BSS段部分将会清零。

4) 堆区(heap):

用于动态内存分配。堆在内存中位于bss区和栈区之间。一般由程序员分配和释放,若程序员不释放,程序结束时有可能由OS回收。

堆(heap): 堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc 等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free 等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。

在将应用程序加载到内存空间执行时,操作系统负责代码段、数据段和BSS段的加载, 并将在内存中为这些段分配空间。栈段亦由操作系统分配和管理,而不需要程序员显示地管理;堆段由程序员自己管理,即显式地申请和释放空间。

5) 栈区(stack):

由编译器自动分配释放,存放函数的参数值、局部变量的值等。

存放函数的参数值、 局部变量的值,以及在进行任务切换时存放当前任务的上下文内容。其操作方式类似于数据结构中的栈。 每当一个函数被调用,该函数返回地址和一些关于调用的信息,比如某些寄存器的内容,被存储到栈区。 然后这个被调用的函数再为它的自动变量和临时变量在栈区上分配空间, 这就是C实现函数递归调用的方法。每执行一次递归函数调用,一个新的栈框架就会被使用, 这样这个新实例栈里的变量就不会和该函数的另一个实例栈里面的变量混淆。

栈(stack) :栈又称堆栈, 是用户存放程序临时创建的局部变量,也就是说我们函数括弧"{}"中定义的变量 (但不包括static 声明的变量,static 意味着在数据段中存放变量)。除此以外,在函数被调用时, 其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放 回栈中。由于栈的先进先出特点, 所以栈特别方便用来保存/ 恢复调用现场。

从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(微信开发)Laya转发H5网页到微信,带图片

网页转发到微信时,带图片和自定义标题。2022年11月22号 关键解说 _wx.config({ debug: _wx_configdebug, appId: e.appId, timestamp: e.timestamp, nonceStr: e.nonceStr, signature: e.signature, jsApiList: [ // 所有要调用的 API 都要加到这个列表中 ‘onMen…

移动端H5页面开发的几种方法

单位: px 宽度百分比,高度px 在不同屏幕下的效果是不一样的,可用媒体查询(media)对不同宽度的手机进行适配,麻烦,不推荐使用 单位:rem 1、flexible 用法:https://blog.c…

H5页面调用微信支付

1、H5页面使用微信支付,首先需要注册微信公众号,在设置与开发>公众号设置>功能设置中配置业务域名、JS接口安全域名、网页授权域名。支付功能页面需在此域名链接下的页面。 2、加入域名后,就可以在H5页面调用微信支付功能。首先请求后台…

H5实现移动端,PC端页面分享

想做个页面分享功能,既要兼容移动端,也要兼容PC端。 找了一轮,决定PC端用百度分享的api: http://share.baidu.com/code/advance 移动端一开始想用soshm.js,发现ios没问题,但安卓手机在微信上点微博完全没…

app端内h5页面使用微信h5支付

app端内h5页面使用微信h5支付 app端内h5页面使用微信h5支付一、起初使用的方法二、解决方法三、最后 app端内h5页面使用微信h5支付 一、起初使用的方法 在对接支付宝支付的时候,我是使用window.open()直接打开后端返回的链接,完全没有任何问题&#xf…

H5页面内嵌到微信小程序和APP,做分享操作

前言 最近接到项目新需求,H5项目需要内嵌到微信小程序和APP里,然后将H5页面分享出去,被分享的人可以点击消息跳转到H5页面。H5页面不难,难的是要与微信小程序和APP进行交互,因为以前也没有接触过,所以这里…

H5及H5页面是什么意思?如何制作H5页面?

H5是HTML5的简称。HTML5是HTML最新的修订版本,是一种超文本标记语言。H5有两大特点:首先,强化了 Web 网页的表现性能。其次,追加了本地数据库等 Web 应用的功能。 H5页面就是利用html5制作出来的页面,尤其在微信中发展…

不懂技术,如何轻松制作微信H5页面?

H5这个由HTML5简化而来的词汇,正通过微信广泛传播。H5是集文字、图片、音乐、视频、链接等多种形式的展示页面,丰富的控件、灵活的动画特效、强大的交互、实现信息传播,非常适合通过手机的展示、分享。也因其灵活性高、开发成本低、制作周期短…

Java基础语法练习题

2023.2.18刷题 1、java的4类流程控制语句 解析: java的4类流程控制语句 循环语句:while,for,do while 选择语句(分支语句):if,switch 跳转语句:break,continue,break,label 异常处理…

java里在做TCP通讯的时候,一直报java.net.ConnectException: Connection timed out: connect的错误?

可能的你的ip地址发生了变化: 1.在cmd里面输入: ipconfig 2.找到ipv4地址 3.把客户端的Socket S new Socket("192.168.31.65",10002);的192.168.31.65改成现在的即可。

websock报错:The remote endpoint was in state [TEXT_FULL_WRITING] which is an invalid state for caller

网上看到了一些关于这个错误的产生场景 参考:场景:使用websocket遇到的一个小问题 The remote endpoint was in state [TEXT_PARTIAL_WRITING] which is an invalid stat 我这里产生错误的场景是不同的,记录一下 背景 提供websocket服务的…

神经元模型简单制作方法,神经元的简单模型图解

神经元结构图示 (1)由图一可知,图一结构中涉及到3个神经元,含有2个突触,其中A是轴突(神经纤维),B是树突. (2)图二中①是感受器、②是传入神经、③…

HH神经元模型

1、HH神经元的电路图。 电池表示特定离子的平衡电势,电阻器反映通道对特定离子的渗透性。 电容代表的就是细胞膜,存储电荷,起到了电容的作用。 在这个公式中IL代表的是泄露电流,图中它的电路中就是一个电阻R和一个电源的分路&…

神经网络输出层多个神经元

由于matlab升级,已经不能想以前一样直接在newff函数里面规定好隐含层多少个,或者几层,还可以有多个神经元的输出层。改版后需要输出层变成矩阵的形式,神经网络工具箱可以自动识别输出层有几个神经元。详细代码如何下: …

训练神经网络用什么显卡,cpu可以训练神经网络吗

gpu构架为什么更适合发展神经网络 因为神经网络这种大范围多任务的简单运算来说,正好符合GPU这种多核架构,比如你CPU20核心,同时处理20个任务。但是神经网络可能有20000个任务(比喻)。 但最近比较有代表性的GPU-Nvid…

单个神经元

先来看一下单个神经元网络模型: 其中 xi 表示输入,wi 和 b 表示参数。图中下方的公式是 1 函数的模型,嗯,就是一个线性模型。那么就这么一个简单的线性模型怎么仿真出人类神经元那么复杂的玩意儿呢?一个线性模型当然满…

人工神经元模型及常见激活函数

人工神经元模型 生物学上神经元通常由细胞体,细胞核,树突和轴突构成。 树突用来接收其他神经元传导过来的信号,一个神经元有多个树突; 细胞核是神经元中的核心模块,用来处理所有的传入信号; 轴突是输出信…

神经元是个啥子

空间平面的方程 这是一个似曾相识的方程👇 b ∑ n 1 N x n θ n i n 0 b\sum_{n1}^Nx_n\theta_n\bm{i}_n0 bn1∑N​xn​θn​in​0 没错,它描述了空间中的一个平面。其关于每一个坐标轴都有斜率 θ i \theta_i θi​,而 i n 为 这 个 轴…

神经网络的神经元个数,神经网络每层单元数

1、请问如何确定神经网络控制中网络层数和每层神经元个数 你使用的什么神经网络?如果是RBF神经网络,那么只有3层,输入层,隐含层和输出层。确定神经元个数的方法有K-means,ROLS等算法。 谷歌人工智能写作项目:小发猫 …

LSTM中神经元的个数

在初学RNN\LSTM时,经常将其与CNN进行类比,从而会思考LSTM中的神经元的个数。 然而循环神经网络与卷积神经网络差异很大,个人建议不进行类比,概念容易混淆。 其次来解释RNN\LSTM中神经元的个数。 这张在RNN中广为流传的神图&…