首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在exec()更改程序映像之后,malloc‘’ed内存发生了什么变化?

在exec()更改程序映像之后,malloc‘’ed内存发生了什么变化?
EN

Stack Overflow用户
提问于 2011-03-25 06:08:13
回答 2查看 10.7K关注 0票数 38

我知道,当我在Linux中调用某个exec()系统调用时,它会用一个新映像替换当前正在运行的进程。因此,当我派生一个新进程并运行exec()时,该子进程将被新进程替换。

我从堆中分配的任何内存会发生什么情况?假设我想解析任意数量的命令并将其发送到exec()。为了容纳这个任意的数字,我可能不得不在某个时刻分配内存,因为我不认为我可以使用静态大小的数组正确地分配内存,所以我可能会使用malloc()或类似的东西。

我需要将分配的内存保留到调用exec()之后,但exec()再也没有返回。

内存是否会被操作系统回收?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-25 07:16:52

当您调用fork()时,将创建调用进程的副本。这个子进程(几乎)与父进程完全相同,也就是说,由malloc()分配的内存是保留的,您可以自由读取或修改它。修改对父进程是不可见的,因为父进程和子进程是完全分开的。

在子进程中调用exec()时,子进程将被一个新进程替换。摘自execve(2):

代码语言:javascript
运行
AI代码解释
复制
execve() does not return on success, and the text, data, bss, and stack
of the calling process are overwritten by that of the program loaded.

通过覆盖data段,exec()调用有效地回收了以前由malloc()分配的内存。

父进程不受所有这一切的影响。假设您在调用fork()之前已经在父进程中分配了内存,那么该内存在父进程中仍然可用。

编辑:malloc()的现代实现使用匿名内存映射,请参阅mmap(2)。根据execve(2),内存映射不会在exec()调用中保留,因此该内存也会被回收。

票数 35
EN

Stack Overflow用户

发布于 2011-03-25 09:33:31

整个堆--分配的内存,以及用来管理它的所有逻辑malloc --都是被替换的进程映像的一部分。就您的进程而言,它只是消失了。当然,系统会回收它并回收它。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5429141

复制
相关文章
Kubectl exec 背后到底发生了什么?
对于经常和 Kubernetes 打交道的 YAML 工程师来说,最常用的命令就是 kubectl exec 了,通过它可以直接在容器内执行命令来调试应用程序。如果你不满足于只是用用而已,想了解 kubectl exec 的工作原理,那么本文值得你仔细读一读。本文将通过参考 kubectl、API Server、Kubelet 和容器运行时接口(CRI)Docker API 中的相关代码来了解该命令是如何工作的。
米开朗基杨
2020/05/26
2.9K0
ReactDOM.render在react中执行之后发生了什么?
通常是如下图使用,在提供的 container 里渲染一个 React 元素,并返回对该组件的引用(或者针对无状态组件返回 null)。本文主要是将ReactDOM.render的执行流程在后续文章中会对创建更新的细节进行分析,文中的源代码部分为了方便阅读将__DEV__部分的代码移除掉了。
flyzz177
2022/12/08
7200
Linux下c程序的内存映像
今天开始分享C语言里面的存储类型、作用域、生命周期、链接属性等知识点,我们写完一个程序,不只说知其,更要知其所以然。
用户6280468
2022/03/21
3K0
Linux下c程序的内存映像
操作系统|程序映像|内存分配
可执行程序看起来好像占据了一个连续的内存块,称为“程序映像”。程序映像有几个不同的分区。程序文本或者代码显示在低位内存中。已初始化和未初始化的静态变量在映像中有自己的分区。其他分区堆,堆栈和环境。
heidsoft
2022/03/14
7760
操作系统|程序映像|内存分配
ReactDOM.render在react源码中执行之后发生了什么?
通常是如下图使用,在提供的 container 里渲染一个 React 元素,并返回对该组件的引用(或者针对无状态组件返回 null)。本文主要是将ReactDOM.render的执行流程在后续文章中会对创建更新的细节进行分析,文中的源代码部分为了方便阅读将__DEV__部分的代码移除掉了。
flyzz177
2022/09/30
5620
ReactDOM.render在react源码中执行之后发生了什么?
通常是如下图使用,在提供的 container 里渲染一个 React 元素,并返回对该组件的引用(或者针对无状态组件返回 null)。本文主要是将ReactDOM.render的执行流程在后续文章中会对创建更新的细节进行分析,文中的源代码部分为了方便阅读将__DEV__部分的代码移除掉了。
flyzz177
2023/01/06
5720
转让malloc()该功能后,发生了什么事内核?附malloc()和free()实现源
特此声明:在本文中,引用另一篇文章和帖子,结合的概括的理解malloc()函数的实现机制。
全栈程序员站长
2022/07/06
3030
内存映像文件导出
在测试IO密集型应用程序的时候,当出现内存泄露的时候,往往需要针对这部分进行分析内存泄露的具体原因。常规的一种方式是我们使用JVM的监控工具来监控这部分,来查看堆内存以及非堆内存的实际使用率和过程中应用程序本身的CPU使用率。但是被测试的服务一旦出现内存泄露,该服务就会疯狂的打印内存泄露的日志信息同时客户端请求服务,服务一直处于超时的情况。那么这个时候如JVisualVM的监控也会失去连接,并不能够看到很关键的信息。所以下面详细的阐述下当被测试的服务一旦出现内存泄露的时候,使用自动导出以及命令行导出的方式来获取到内存映像的文件,从而对分析内存泄露提供有利的信息。
无涯WuYa
2022/12/03
1.2K0
内存映像文件导出
在浏览器输入URL回车之后发生了什么?(超详细版)
这个问题已经是老生常谈了,更是经常被作为面试的压轴题出现,网上也有很多文章,但最近闲的无聊,然后就自己做了一篇笔记,感觉比之前理解更透彻了。
JAVA葵花宝典
2019/09/25
6740
在浏览器输入URL回车之后发生了什么?(超详细版)
你知道在 cmd 输入 ping 之后发生了什么吗? —— 详解 ICMP 协议
在解释之前我们先来了解一下 ICMP 报文。 ICMP 报文 ? ❔ 为什么要引入 ICMP 协议 ? ✅ 为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP
wsuo
2020/07/31
7530
你知道在 cmd 输入 ping 之后发生了什么吗? —— 详解 ICMP 协议
在浏览器输入URL回车之后发生了什么?(超详细版)
这个问题已经是老生常谈了,更是经常被作为面试的压轴题出现,网上也有很多文章,但最近闲的无聊,然后就自己做了一篇笔记,感觉比之前理解更透彻了。
测试小兵
2019/09/26
6980
在浏览器输入URL回车之后发生了什么?(超详细版)
亚马逊AWS云服务故障,之后发生了什么?
2月28日,在美国西部时间09:44,美国各大主要网站突然出现大面积瘫痪,互联网发生了严重服务故障。
科技云报道
2022/04/12
1.3K0
亚马逊AWS云服务故障,之后发生了什么?
malloc(0)时程序会返回什么?
这个问题看起来十分刁钻,不过稍有常识的人都知道,制定 C 标准的那帮语言律师也不是吃白饭的,对这种奇奇怪怪的问题一定会有定义。翻阅C17 标准 草案 N2176,在 7.22.3 节里,有如下说法:
嵌入式与Linux那些事
2021/10/14
1.6K0
Flutter 中键盘弹起时,Scaffold 发生了什么变化
最近刚好有网友咨询一个问题,那就顺便借着这个问题给大家深入介绍下 Flutter 中键盘弹起时,Scaffold 的内部发生了什么变化,让大家更好理解 Flutter 中的输入键盘和 Scaffold 的关系。
GSYTech
2021/03/02
2.2K0
Flutter 中键盘弹起时,Scaffold 发生了什么变化
神秘!申请内存时底层发生了什么?
内存的申请释放对程序员来说就像空气一样自然,你几乎不怎么能意识到,有时你意识不到的东西却无比重要,申请过这么多内存,你知道申请内存时底层都发生什么了吗?
小林coding
2021/02/23
7000
神秘!申请内存时底层发生了什么?
ReactDOM.render在react源码中执行之后发生了什么?_2023-02-19
通常是如下图使用,在提供的 container 里渲染一个 React 元素,并返回对该组件的引用(或者针对无状态组件返回 null)。本文主要是将ReactDOM.render的执行流程在后续文章中会对创建更新的细节进行分析,文中的源代码部分为了方便阅读将__DEV__部分的代码移除掉了。
flyzz177
2023/02/19
5190
面试环节:在浏览器输入 URL 回车之后发生了什么?(超详细版)
这个问题已经是老生常谈了,更是经常被作为面试的压轴题出现,网上也有很多文章,但最近闲的无聊,然后就自己做了一篇笔记,感觉比之前理解更透彻了。
五分钟学算法
2019/09/08
6280
为什么mmap之后访问地址仍然发生了缺页异常?
作者简介: viho he,ARM64专家,现供职于某芯片公司,专注于Linux内核、BSP、ARM64虚拟化以及与ARM64 SoC相关的各种底软技术 问题简述 在笔者的开发平台上,应用程序使用ION申请cma内存,并用mmap映射到用户地址空间去做写操作。 重点代码摘要如下: 客户希望提高 node->var = some_value; 这里的访问效率(实际代码要复杂些,是申请了一个大数组并往里循环读写数据)。 第一轮分析 首先用perf分析应用程序行为,发现程序在运行时产生了不少page fault
刘盼
2022/09/22
1.5K0
为什么mmap之后访问地址仍然发生了缺页异常?
DPDK 内存管理---malloc_heap和malloc_elem
博文是基于dpdk20.5代码阅读所写,如理解有错误或不当之处,烦请指正,不甚感激。也可以私信我一起探讨。
dpdk-vpp源码解读
2023/01/04
1.4K0
DPDK 内存管理---malloc_heap和malloc_elem
点击加载更多

相似问题

free()之后内存发生了什么变化?

42

在malloc()分配后释放的内存发生了什么变化?

27

C-在free()之后内存发生了什么变化?

30

malloc‘’ed内存中的数据损坏

10

访问malloc‘’ed内存后的C

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文