程序在内存中的分布

news2024/11/25 5:34:46

1. 具体分布细节由编译器决定

2. 分布图

在这里插入图片描述

3. 静态局部变量通常被存放在程序的.data段中。

一般地,静态局部变量定义在函数体内,在函数执行时,它会在静态存储区分配内存,并且只被初始化一次。因为静态局部变量是在编译阶段产生的,而非执行期间动态生成的,所以它们的空间在编译阶段就已经被确认。这与.bss段中的变量不同,.bss段中的变量是未经初始化的全局或者静态变量,其内存空间也被系统预留,但是在程序加载时内存中并没有给定初值。
因此,静态局部变量需要在程序启动时进行初始化,通常的做法是将静态局部变量的初始值存放在程序的.data段中。程序加载时,会将.data段中的内容复制到已分配的内存位置,从而完成对静态局部变量的初始化。当程序执行到相应函数时,静态局部变量便位于已经初始化的数据段中,并可以正常使用。

4. 静态全局变量既可以存储在程序的.bss段中,也可以存储在.data段中,具体取决于它是否初始化。

如果静态全局变量被显式初始化(例如int x = 1;),那么它会被存储在程序的.data段中。.data段是用来存放已经初始化的全局变量、静态变量等数据的段。该段在程序加载时就会被加入到程序的内存空间中,并且相应的数据也会被加载进来。对于已经初始化的全局变量和静态变量,其具体的值在程序启动时就已经确定,因此可以直接保存在.data段中。

而如果静态全局变量没有被显式初始化(例如int x;),那么它会被存储在程序的.bss段中。.bss段是用来存放未初始化的全局变量、静态变量等数据的段。该段在程序加载时也会被加入到程序的内存空间中,并且相应的数据会被初始化为0。由于未初始化的全局变量和静态变量在程序启动时并没有确定其具体的值,因此可以通过简单地将它们的地址清零来完成初始化,从而避免在程序加载时浪费内存空间来存储它们的初始值。

需要注意的是,很多编译器在实现时会将程序的.bss段和.data段合并为一个共同的数据段,因此静态全局变量的存储方式也可能会有所不同。

5. 程序在内存中的分布通常受多种因素的影响,例如编译器的设置、程序代码和数据段的大小、启动代码、链接脚本等。在ARM架构下,程序通常被划分为以下三个部分:

5.1 文本段(text segment):文本段包含程序的机器指令,通常以只读的方式存储在内存中。这些指令是可执行的代码,通常被加载到指令高速缓存中以提高程序执行的效率。

5.2 数据段(data segment):数据段存储程序中的静态变量和全局变量,以及已初始化的常量数据。数据段通常是可读写的,它的地址通常在程序启动时由链接脚本进行定义和分配。

5.3 堆栈段(stack segment):堆栈段用于存储函数调用期间的局部变量、函数参数、返回地址和其他临时值。堆栈段通常位于内存的较低端,并在程序运行时自动增长(通常是向下)。堆栈的大小通常在程序启动时由启动代码或链接脚本进行设置和分配。

在程序运行时,操作系统或者硬件负责将程序的各个部分从磁盘或者其他存储介质中加载到内存中,并按照内存映射表进行映射和设置。程序在运行时通过访问这些存储区域来执行指令、读取和写入数据以及处理函数调用等操作。

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

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

相关文章

SpringCloud GateWay 学习

SpringCloud GateWay 文章目录 SpringCloud GateWay1 Gateway 介绍2 代码实现 1 Gateway 介绍 有一个前后端分离项目,分析如图 使用网关服务Gateway,重构项目架构 Gateway 是在 Spring 生态系统之上构建的 API 网关服务,基于 Spring &#x…

DES,RAS,HASH

是猫咪,我加入了一些猫咪 1.DES Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。设计中使用了分组密码设计的两个原则:混淆(confusion)和扩散(diffusion)。DES加密算法原理简析_51…

秋招笔试零基础怎么办?自顶向下真题学习法,这样准备就稳啦!

秋招笔试零基础怎么办?自顶向下真题学习法,这样准备就稳啦 秋招临近,是时候提前准备笔试了。想必各位都忙着刷穿leetcode的剑指Offer,或者牛客的往年真题等等 但你真的了解自己的算法知识板块哪里有纰漏吗? 你知道今…

【C++】初识STL

目录 🌞专栏导读 🌛什么是STL 🌛STL的版本 🌛STL的六大组件 🌛STL的重要性 🌛STL的缺陷 🌞专栏导读 🌟作者简介:日出等日落,在读本科生一枚&#xff0…

nginx网站安装服务

nginx概述 一款高性能、轻量级web服务软件稳定性高系统资源消耗低对HTTP并发连接的处理能力高单台物理服务器可支持30000~50000个并发请求 正向代理:通过代理服务器来访问资源,这种代理服务成为正向代理 反向代理:客户端与代理是无感知的&…

【Go LeetDay】总目录(1~83)

Leetcode Golang Day1~10 Golang每日一练(leetDay0001) 1. 两数之和 Two Sum 2. 两数相加 Add Two Numbers 3. 无重复字符的最长子串 Longest-substring-without-repeating-characters Golang每日一练(leetDay0002) 4. 寻找两个正序数组的中位数 Median of two sorted arra…

如何通过帮助文档来减少你的客服咨询量,提高工作效率

相信你的公司网站或者产品中总会设置一个“联系我们”按钮,让客户能够遇到问题随时能够找到客服人员并且快速解决,在创业初期,可能这样的模式没有问题,但是随着客户越来越多,客服的需求也随之增加,客服人员…

【iOS】--对象的底层结构

源码 先转一下源码 //#import <Foundation/Foundation.h> #import <objc/runtime.h>interface LGPerson : NSObject property (nonatomic, strong) NSString *KCName; endimplementation LGPersonendint main(int argc, const char * argv[]) {autoreleasepool {…

DVWA-XSS (Stored) Low/Medium/High低中高级别

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 XSS Stroed 一、Low级别二、Medium级别三、Hign级别 这关是一个论坛功能&#xff0c;把用…

设计模式(六):结构型之代理模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二、三)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(四)&#xff1a;创建型之原型模式 设计模式(五)&#xff1a;创建型之建造者模式 设计模式(六)&#xff1a;结构型之代理模式 目录 一、…

深入分析——Linux DMA Fence

目录 一 简介 二 基本原理 三 代码实现 3.1 Init 3.2 wait 3.3 signaling 3.4 callback 3.5 signaled 3.6 signal 3.7 refcount & release 四 Fence Status 一 简介 dma-fence是linux 内核中同步原语&#xff0c;它只有两种状态signaled和unsigned。因为其本身的…

华为OD机试之找出经过特定点的路径长度(Java源码)

找出经过特定点的路径长度 题目描述 无 输入描述 输入一个字符串&#xff0c;都是以大写字母组成&#xff0c;每个相邻的距离是 1&#xff0c; 第二行输入一个字符串&#xff0c;表示必过的点。 说明每个点可过多次。 输出描述 经过这些必过点的最小距离是多少 用例 输入 ANT…

OpenGL之坐标系统

文章目录 概述局部空间世界空间观察空间裁剪空间正射投影透视投影 进入3D代码 OpenGL希望在每次顶点着色器运行后&#xff0c;我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说&#xff0c;每个顶点的x&#xff0c;y&#xff0c;z坐标都应该…

基于diffusers训练lora,AI换装

阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台欢迎登录阿里云&#xff0c;全球领先的云计算及人工智能科技公司&#xff0c;阿里云为200多个国家和地区的企业、开发者和政府机构提供云计算基础服务及解决方案。阿里云云计算、安全、大数据、人工智能、企业…

设计模式(四):创建型之建造者模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(三)&#xff1a;创建型之原型模式 设计模式(四)&#xff1a;创建型之建造者模式 目录 一、设计模式分类二、建造者模式1、概述2、结构3、实例…

Win10设置 Java 环境变量

文章目录 概要下载jdk安装jdk配置环境变量测试环境变量是否配置成功总结 概要 学习java开发首先需要安装jdk,并设置环境变量。 接下来就来介绍一下如何在 windows 10 系统中配置java环境变量 下载jdk https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe…

C#,生信软件实践(06)——DNA数据库GenBank文件的详解介绍及解释器之完整C#源代码

1 GenBank 1.1 NCBI——美国国家生物技术信息中心&#xff08;美国国立生物技术信息中心&#xff09; NCBI&#xff08;美国国立生物技术信息中心&#xff09;是在NIH的国立医学图书馆&#xff08;NLM&#xff09;的一个分支。它的使命包括四项任务&#xff1a;1. 建立关于分…

LIBEVENT 框架

LIBEVENT 框架 LAMPlibevent特点:libevent的功能libevent官网安装步骤Linux下libevent主要API介绍libevent使用步骤libevent 编程案例LAMP 从LAMP说起: 是一个缩写,它指一组通常一起使用来运行动态网站或者服务器的自由软件 Linux - 操作系统Apache - 网页服务器MySQL - 数据…

Automatic Prompt Optimization with “Gradient Descent” and Beam Search

在“自然语言域”使用类似梯度下降的方法优化prompt 整篇文章比较精髓的思想在于 利用LLM本身去寻找prompt的瑕疵。将语言模型的输出 y ^ \hat{y} y^​与正确答案&#xff08;label&#xff09; y y y还有prompt p p p 一起送入LLM&#xff0c;并通过类似“What is wrong wi…

如果提取音乐的伴奏和人声,分享两个方法给大家!

音乐中的伴奏提取一直是许多音频爱好者关注的话题。在本文中&#xff0c;我们将介绍两种简单易用的方法&#xff0c;并且特别推荐一款记灵在线工具&#xff0c;它能够帮助你轻松提取音乐伴奏&#xff0c;并且支持批量处理&#xff01; 方法一&#xff1a;Audacity 首先&#…