【基础知识】BSS段,数据段,代码段,堆栈段

2023-10-27

在了解BSS段他们之前,我们先来看一下他们在内存中的位置

           a1aa58014bf848058b7f37813b26ab70.png

 BSS段(bss segmen)

        BSS 是 Block Started by Symbol 的简称,通常是指用来存放程序中未初始化全局变量的内存区域,属于静态内存分配,在可执行文件中,由系统从可执行文件中加载。

        在初始化时 BSS 段部分将会清零。BSS 段属于静态内存分配,即程序一开始就将其清零了。并且BSS段不给该段的数据分配空间,只是记录数据所需空间的大小。

数据段(data segment)

        data段是指用来存放程序中已初始化全局变量的内存区域,属于静态内存分配,在可执行文件中。

代码段(code segment)

        又称文本段(text segment),是指用来存放程序执行代码的一块内存区域,这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读,也有可能包含一些只读的常数变量,例如字符串变量等。

堆   

        堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。

  • 当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);
  • 当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)。

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

        从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区。它是由操作系统分配的,内存的申请与回收都由OS管理。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【基础知识】BSS段,数据段,代码段,堆栈段 的相关文章

  • 让 MongoDB 在 Linux 上监听远程连接

    我已在 Windows 本地计算机上 上成功安装 MongoDB 作为服务 但现在我想将 MongoDb 移动到单独的服务器 所以我将 tarball 解压到网络上的虚拟服务器 运行 Linux 当我从本地计算机使用 PuTTY 连接到服务
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 如何更改 Ubuntu 14.04 上的 php-cli 版本?

    我是 Linux 新手 在篡改时破坏了一些 php 设置 如果我执行一个包含以下内容的 php 脚本 phpinfo 它显示 php 版本为 5 6 但通过命令行 如果我运行php v它返回 7 0 版本 我想让两个版本匹配 我怎样才能修复
  • Godaddy 托管上的 CakePHP 控制台

    我一直在努力让我的 CakePHP 网站在 Godaddy 网格托管 帐户上运行 我的蛋糕应用程序设置是从帐户的子目录托管的 并且可以通过子域访问 我必须调整我的 htaccess 文件才能使其正常工作 现在我需要让 CakePHP 控制台
  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • 何时使用 pthread 条件变量?

    线程问题 看来 只有在其他线程调用 pthread cond notify 之前调用 pthread cond wait 时 条件变量才起作用 如果在等待之前发生通知 那么等待将被卡住 我的问题是 什么时候应该使用条件变量 调度程序可以抢占
  • 从 PL/SQL 调用 shell 脚本,但 shell 以 grid 用户而非 oracle 身份执行

    我正在尝试使用 Runtime getRuntime exec 从 Oracle 数据库内部执行 shell 脚本 在 Red Hat 5 5 上运行的 Oracle 11 2 0 4 EE CREATE OR REPLACE proced
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 创建 jar 文件 - 保留文件权限

    我想知道如何创建一个保留其内容的文件权限的 jar 文件 我将源代码和可执行文件打包在一个 jar 文件中 该文件将在使用前提取 人们应该能够通过运行批处理 shell 脚本文件立即运行示例和演示 然后他们应该能够修改源代码并重新编译所有内
  • 从 csv 文件中删除特定列,保持输出上的相同结构[重复]

    这个问题在这里已经有答案了 我想删除第 3 列并在输出文件中保留相同的结构 输入文件 12 10 10 10 10 1 12 23 1 45 6 7 11 2 33 45 1 2 1 2 34 5 6 I tried awk F 3 fil
  • Jenkins中找不到环境变量

    我想在詹金斯中设置很多变量 我试过把它们放进去 bashrc bash profile and profile of the jenkins用户 但 Jenkins 在构建发生时找不到它们 唯一有效的方法是将所有环境变量放入Jenkinsf
  • gdb查找行号的内存地址

    假设我已将 gdb 附加到一个进程 并且在其内存布局中有一个文件和行号 我想要其内存地址 如何获取文件x中第n行的内存地址 这是在 Linux x86 上 gdb info line test c 56 Line 56 of test c
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • 使用 sed 更新 xml 属性(Windows + cygwin 和 Linux)?

    我需要使用 sed 命令对 xml 文件进行更新 但我在这方面遇到了麻烦 它需要在 Windows 使用 cygwin 和 Linux 上运行 XML 具有以下元素
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • Android 时钟滴答数 [赫兹]

    关于 proc pid stat 中应用程序的总 CPU 使用率 https stackoverflow com questions 16726779 total cpu usage of an application from proc
  • nslookup 报告“无法解析 '(null)': 名称无法解析”,尽管它成功解析了 DNS 名称

    我在 ubuntu 上 并且正在运行 docker 默认桥接网络 我有 Zookeeper kafka 的容器化版本 以及我编写的与 kafka 对话的应用程序 I do a docker exec it
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific

随机推荐

  • 程序框架-输入控制模块

    输入控制模块 用到之前的事件中心模块和公共Mono模块 核心利用观察者设计模式进行事件的分发与注册 InputMgr脚本 输入控制功能模块通过MonoMgr脚本创建Update方法 在通过EventCenter触发事件
  • 泛微E-Mobile 6.0存在命令执行漏洞

    一 漏洞简介 泛微E Mobile 6 0爆出存在命令执行漏洞的问题 现在已经确认了这个漏洞可以被攻击者利用 在某些情况下 用户的输入可能被直接传递给底层操作系统的命令执行函数 攻击者可以通过在输入中插入特殊字符或命令序列来欺骗应用程序将其
  • 关于后台列表,跳转详情和编辑页面

    后台管理系统 从列表跳转详情页面的常规操作 一般新增 编辑和详情页面是共用的 但是可能详情是禁止编辑的 点击编辑按钮之后页面又要可以编辑 一般情况下 页面初始化 是否能够编辑 是通过路径上的pageType来判断 如 xxxxx xxxxx
  • RealityCapture照片扫描建模流程

    RealityCapture照片扫描建模大概有这么几步 拍摄照片 调整照片 导入照片进软件 然后根据照片生成点云 然后对点云范围进行调整 然后根据最终点云效果生成模型 然后对模型修整并进行简化 毕竟他生成的模型面数过大 也回有一些破面之类的
  • STM32F103+NRF24L01通道配置之多发一收

    STM32F103 NRF24L01通道配置之多发一收 准备材料 让我们开始吧 准备材料 1 NRF24L01模块 3 2 STM32F103C8T6单片机的最小系统模块 3 3 正点原子的例程 实验33 无线通信实验 让我们开始吧 下面只
  • 从封装变化的角度看设计模式——组件协作

    什么是设计模式 要了解设计模式 首先得清楚什么是模式 什么是模式 模式即解决一类问题的方法论 简单得来说 就是将解决某类问题的方法归纳总结到理论高度 就形成了模式 设计模式就是将代码设计经验归纳总结到理论高度而形成的 其目的就在于 1 可重
  • 网页打开时都发生了什么?我被吓着了

    内容参考自网页打开时都发生了什么 我被吓着了 在浏览器里输入网址或者点击链接 网页打开了 这是我们上网时再普通不过的一幕 但是如此简单的表象背后 却隐藏着无比复杂的技术流程 想涨涨知识吗 往下看吧 一个HTTP请求的过程 为了简化我们先从一
  • 图片博客

    在这里插入图片描述
  • Shell输入输出重定向

    一 文件描述符 英文是file descriptor简称fd 文件描述符是一个非负整数 它是一个索引值 指向进程打开的文件 Linux程序在执行任何形式的 I O 操作时 都是在读取或者写入一个文件描述符 每个文件描述符会与一个打开的文件相
  • 前方交会与后方交会

    1 前方交会 1 1 前方交会的概念 利用立体像对两张像片的内方位元素 同名像点坐标和像对的相对方位元素 或外方位元素 解算模型点坐标 或地面点坐标 的工作 称为空间前方交会 在摄影测量中主要有两种 1 利用立体像对两张像片的相对方位元素
  • 命令行mvn打包的时候报错:No compiler is provided in this environment. Perhaps you are running on a JRE

    一 前言 这部分是安装Elasticsearch ik中文分词的时候 用mvn打包报错 No compiler is provided in this environment Perhaps you are running on a JRE
  • VC的路径

    1 注意 include Common MyTD h 这里面的目录表示方式与 CFile saveFile saveFile Open T abc bmp CFile modeCreate CFile modeNoTruncate CFil
  • 前端 JQuery

    jquery 理解 function 这是为了防止文档在完全加载 就绪 之前运行 jQuery 代码 换句话说 写在这里面的JQuery代码都是文档加载好之后的 就不会有获取一个还没有加载好的图片这种问题了 另一种写法 document r
  • 香港服务器微信js接口无法,微信jssdk分享接口不能正常使用

    调用的分享接口完全一样 只是在不同网页调用 但是有的可以有的不可以分享 不知道怎么回事 调用的代码如下 appId 认证的appid appsecret 认证的appsecret timestamp time jsapi ticket ma
  • 头文件

    头文件
  • flutter text 左对齐_Flutter 基础布局Widgets之Stack详解

    概述 Stack 组件是一种层叠式布局 即组件覆盖另一个组件 覆盖的顺序取决于在children中放置的顺序 使用场景比如在图片上加上一些文字描述 即将文本Widget覆盖在图片组件 详见下面的小例 构造函数 Stack Key key t
  • C# 连接Sql Server 数据库

    class DataBaseUtil static string dataSource server 数据库地址 database 数据库表名 uid 用户 pwd 密码 数据库连接字符串 public static SqlConnecti
  • 区块链 (数据结构)

    区块链是分布式数据存储 点对点传输 共识机制 加密算法等计算机技术的新型应用模式 区块链 Blockchain 是比特币的一个重要概念 它本质上是一个去中心化的数据库 同时作为比特币的底层技术 是一串使用密码学方法相关联产生的数据块 每一个
  • Anconda基本操作指令

    1 查看anconda版本基本信息 查看版本 conda v 默认进入base环境 conda config set auto activate base true 默认退出base环境 conda config set auto acti
  • 【基础知识】BSS段,数据段,代码段,堆栈段

    在了解BSS段他们之前 我们先来看一下他们在内存中的位置 BSS段 bss segmen BSS 是 Block Started by Symbol 的简称 通常是指用来存放程序中未初始化的全局变量的内存区域 属于静态内存分配 在可执行文件