当前位置: 首页 > news >正文

C语言的5个内存段你了解吗?( 代码段/数据段/栈/堆)

前言:这些内存段在程序运行时起着不同的作用,有不同的分配方式和存储内容。对于 C 语言程序员来说,了解这些内存段的特性和用途有助于更好地理解内存管理、变量的存储位置以及程序执行过程中的内存分配情况

1. 代码段 (Code Segment)

  • 内容:代码段,也称为文本段,是包含频繁执行代码的内存区域。
  • 特点:代码段通常是只读的,以避免被缓冲区溢出等编程错误覆盖的风险。
  • 不包含:该代码段不包含局部变量(在C语言中也称为自动变量)、全局变量等程序变量。
  • 字符串字面量:基于C实现,代码段也可以包含只读字符串。例如,当你执行printf("Hello, world")时,字符串"Hello, world"会在代码/文本段中创建。你可以在Linux 中使用size命令验证这一点。
  •  进一步阅读:代码段

2. 数据段 (Data Segment)

数据段被分成以下两部分,通常位于堆区域的下方,或者在某些实现中位于栈的上方,但数据段永远不会位于堆和栈区域之间

a. 未初始化数据段 (BSS 段)
  • 内容:包含未初始化的全局变量(包括指针变量)、未初始化的常量全局变量、未初始化的局部静态变量。
  • 存储位置:任何未初始化的全局或静态局部变量都将存储在未初始化的数据段中。
  • 例子:全局变量如 int globalVar; 或静态局部变量如 static int localStatic; 会存储在未初始化数据段中。
  • 注意:如果你声明一个全局变量并将其初始化为0或NULL,那么它仍然会进入未初始化的数据段或bss。
  • 进一步阅读:了解更多关于未初始化数据段的信息:未初始化的数据段
b. 初始化数据段
  • 内容:包含初始化的全局变量(包括指针变量)、初始化的常量全局变量、初始化的局部静态变量。
  • 例子:全局变量如 int globalVar = 1; 或静态局部变量如 static int localStatic = 1; 会存储在初始化数据段中。
  • 细分:这个段可以进一步分为初始化只读区和初始化读写区,初始化全局常量变量放在初始化只读区,而可以在运行时修改值的变量放在初始化读写区。
  • 大小:这个段的大小由程序源代码中值的大小决定,并且在运行时不会改变。
  • 进一步阅读:初始化数据段

3. 栈段 (Stack Segment)

  • 内容:用于存储函数内部创建的变量,如函数的局部变量(包括指针变量)、函数参数、返回地址等。
  • 特点:函数执行结束后,存储在栈中的变量将被删除。
  • 进一步阅读:栈段

4. 堆段 (Heap Segment)

  • 内容:这个段是为了支持动态内存分配。如果程序员想动态分配一些内存,那么在C语言中,可以使用malloc,calloc或realloc方法来完成。
  • 例子:例如,当 int* ptr = malloc(sizeof(int) * 2) 时,会在堆上分配8字节内存,并将分配的内存地址返回并存储在 ptr 变量中。
  • 存储位置:取决于声明/使用方式,指针变量 ptr 可能位于栈或数据段上。

这些内存段在 C 语言中扮演着重要的角色,了解它们的特性和用途有助于程序员更好地理解内存管理和程序执行过程中的内存分配情况。

相关文章:

C语言的5个内存段你了解吗?( 代码段/数据段/栈/堆)

前言:这些内存段在程序运行时起着不同的作用,有不同的分配方式和存储内容。对于 C 语言程序员来说,了解这些内存段的特性和用途有助于更好地理解内存管理、变量的存储位置以及程序执行过程中的内存分配情况 1. 代码段 (Code Segment) 内容&a…...

智能合约检测:新一代区块链技术的安全守护

目录 1、智能合约检测:新一代区块链技术的安全守护 2、智能合约性能检测步骤...

Flutter笔记:缩放手势

Flutter笔记 缩放手势 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/134485138 目 录 1. 概述2. 缩放手…...

JAXB:用XmlElement注解复杂类型的Java属性,来产生多层嵌套的xml元素

例如&#xff0c;下面这段请求的xml代码&#xff0c;在元素body下面又多了一层&#xff0c;嵌套了4个元素&#xff1a; <?xml version"1.0" encoding"UTF-8"?><request><reqtype>04</reqtype><secret>test</secret>…...

万字长文 - Python 日志记录器logging 百科全书 - 高级配置之 日志分层

万字长文 - Python 日志记录器logging 百科全书 - 高级配置之 日志分层 前言 在 Python 的logging模块中&#xff0c;它不仅提供了基础的日志功能&#xff0c;还拥有一系列高级配置选项来满足复杂应用的日志管理需求。 说到logging 模块的高级配置&#xff0c;必须提及日志分…...

工作记录---为什么双11当天不能申请退款?(有趣~)

为什么&#xff1f; 服务降级了 服务降级&#xff1a; 当服务器压力剧增的情况下&#xff0c;根据实际业务情况及流量&#xff0c;对一些服务和页面有策略的不处理或换种简单的方式处理&#xff0c;从而释放服务器资源以保证核心交易正常运作或高效运作。 分布式系统的降级…...

ElasticSearch在Windows上的下载与安装

Elasticsearch是一个开源的分布式搜索和分析引擎&#xff0c;它可以帮助我们快速地搜索、分析和处理大量数据。Elasticsearch能够快速地处理结构化和非结构化数据&#xff0c;支持全文检索、地理位置搜索、自动补全、聚合分析等功能&#xff0c;能够承载各种类型的应用&#xf…...

软件测试/测试开发/人工智能丨基于Spark的分布式造数工具:加速大规模测试数据构建

随着软件开发规模的扩大&#xff0c;测试数据的构建变得越来越复杂&#xff0c;传统的造数方法难以应对大规模数据需求。本文将介绍如何使用Apache Spark构建分布式造数工具&#xff0c;以提升测试数据构建的效率和规模。 为什么选择Spark&#xff1f; 分布式计算&#xff1a;…...

ClickHouse的 MaterializeMySQL引擎

1 概述 MySQL 的用户群体很大&#xff0c;为了能够增强数据的实时性&#xff0c;很多解决方案会利用 binlog 将数据写入到 ClickHouse。为了能够监听 binlog 事件&#xff0c;我们需要用到类似 canal 这样的第三方中间件&#xff0c;这无疑增加了系统的复杂度。 ClickHouse 20.…...

Ubuntu 22.04安装Rust编译环境并且测试

我参考的博客是《Rust使用国内Crates 源、 rustup源 |字节跳动新的 Rust 镜像源以及安装rust》 lsb_release -r看到操作系统版本是22.04,uname -r看到内核版本是uname -r。 sudo apt install -y gcc先安装gcc&#xff0c;要是结果给我的一样的话&#xff0c;那么就是安装好了…...

制作Go程序的Docker容器(以及容器和主机的网络问题)

今天突然遇到需要将 Go 程序制作成 Docker 的需求&#xff0c;所以进行了一些研究。方法很简单&#xff0c;但是官方文档和教程有些需要注意的地方&#xff0c;所以写本文进行记录。 源程序 首先介绍一下示例程序&#xff0c;示例程序是一个 HTTP 服务器&#xff0c;会显示si…...

mysql清除数据痕迹_MySQL使用痕迹清理~/.mysql_history - milantgh

mysql会给出我们最近执行的SQL命令和脚本&#xff1b;同linux command保存在~/.bash_history一样&#xff0c;你用mysql连接MySQL server的所有操作也会被记录到~/.mysql_history文件中&#xff0c;这样就会有很大的安全风险了&#xff0c;如添加MySQL用户的sql也同样会被明文记…...

PDF控件Spire.PDF for .NET【转换】演示:自定义宽度、高度将 PDF 转 SVG

我们在上一篇文章中演示了如何将 PDF 页面转换为 SVG 文件格式。本指南向您展示如何使用最新版本的 Spire.PDF 以及 C# 和 VB.NET 指定输出文件的宽度和高度。 Spire.Doc 是一款专门对 Word 文档进行操作的 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻…...

01背包 P1507 NASA的食物计划

P1507 NASA的食物计划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 普通01背包状态表示&#xff1a;f(i, j)表示前i件物品放入一个容量为j的背包可以获得的最大价值。 本题类似&#xff0c;f(i, j, k)表示前i件物品放入一个限制为j&#xff0c;且另一个限制为k的背包中可以…...

平衡二叉树c语言版

一、定义二叉树结点结构体 /*** 定义平衡二叉树结点 */ struct avlbinarytree { //数据域NodeData* data;///树高int h;struct avlbinarytree* left;struct avlbinarytree* right; }; typedef struct avlbinarytree AVLNode; 二、声明函数的操作 /*** 创建结点 */ AV…...

初始环境配置

目录 一、JDK1、简介2、配置步骤 二、Redis1、简介2、配置步骤 三、MySQL1、简介2、配置步骤 四、Git1、简介2、配置步骤 五、NodeJS1、简介2、配置步骤 六、Maven1、简介2、配置步骤 七、Tomcat1、简介2、配置步骤 一、JDK 1、简介 JDK 是 Oracle 提供的 Java 开发工具包&…...

记GitLab服务器迁移后SSH访问无法生效的问题解决过程

公司IT心血来潮对GitLab服务器进行安全升级&#xff0c;升级后无法启动。。。只得启用备用服务器&#xff0c;具体的备份机制不祥&#xff0c;只知道原数据都在&#xff0c;但文件系统是否完全一样不清楚。切换为备用服务器后使用SSH下载代码死活不成功&#xff0c;反复提示需要…...

【NGINX--2】高性能负载均衡

1、HTTP 负载均衡 将负载分发到两台或多台 HTTP 服务器。 在 NGINX 的 HTTP 模块内使用 upstream 代码块对 HTTP 服务器实施负载均衡&#xff1a; upstream backend {server 10.10.12.45:80 weight1;server app.example.com:80 weight2;server spare.example.com:80 backup; …...

Android studio run 手机或者模拟器安装失败,但是生成了debug.apk

错误信息如下&#xff1a;Error Installation did not succeed. The application could not be installed&#xff1a;List of apks 出现中文乱码&#xff1b; 我首先尝试了打包&#xff0c;能正常安装&#xff0c;再次尝试了debug的安装包&#xff0c;也正常安装&#xff1…...

【面试经典150 | 数学】加一

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;加一 其他语言python3 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结…...

用Python+OpenCV给《梦幻西游》写个自动挖图脚本(附完整代码与避坑指南)

用PythonOpenCV实现《梦幻西游》自动挖宝图的全流程实战 最近在技术社区看到不少关于游戏自动化的讨论&#xff0c;尤其是像《梦幻西游》这类经典MMORPG&#xff0c;很多开发者尝试用计算机视觉技术实现自动化操作。作为一个长期关注OpenCV应用的开发者&#xff0c;我花了三周…...

见素抱朴的 SAP UI5 开发之道, 从「绝圣弃智」到少代码、少炫技、少内耗的前端工程

《道德经》第十九章说, 「绝圣弃智,民利百倍;绝仁弃义,民复孝慈;绝巧弃利,盗贼无有。此三者以为文不足。故令有所属,见素抱朴,少私寡欲。」通行本的这段文字,最容易被误读成反知识、反技术、反规范。放到 SAP UI5 开发里,这种误读尤其危险。SAP UI5 本来就是一个工程…...

crawdad-openclaw:构建高韧性智能爬虫的模块化框架实战

1. 项目概述&#xff1a;一个为数据抓取而生的开源“机械爪”如果你和我一样&#xff0c;在数据工程或网络爬虫领域摸爬滚打过几年&#xff0c;那你一定经历过这样的时刻&#xff1a;面对一个结构复杂、反爬机制严密的网站&#xff0c;你精心编写的爬虫脚本在运行了几个小时后&…...

小型嵌入式系统开发流程与实践指南

1. 小型嵌入式系统开发流程概述在嵌入式系统开发领域&#xff0c;一个结构化的软件开发流程往往是项目成功的关键因素。与通用计算机软件开发不同&#xff0c;嵌入式系统通常具有资源受限、实时性要求高、硬件依赖性强等特点&#xff0c;这使得开发流程的设计需要特别考虑这些约…...

Transmission密码安全加固:从配置文件到命令行实战

1. Transmission密码安全加固的必要性 最近在帮朋友排查一个奇怪的网络问题时&#xff0c;意外发现他路由器上的Transmission客户端竟然还在使用默认密码。这让我惊出一身冷汗——这相当于把家门钥匙插在门锁上啊&#xff01;作为一款广泛使用的BT客户端&#xff0c;Transmiss…...

AI研发团队“隐性崩溃”前的9个信号:SITS2026追踪18个月的142起项目衰变案例全复盘

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI研发团队“隐性崩溃”的本质定义与SITS2026研究框架 什么是“隐性崩溃”&#xff1f; AI研发团队的“隐性崩溃”并非指系统宕机或项目终止&#xff0c;而是指团队在表观正常运转下&#xff0c;持续丧…...

从Bode图到PI参数:基于开环传函特性的转速环整定实战解析

1. 转速环PI参数整定的核心逻辑 我第一次接触电机控制时&#xff0c;面对转速环PI参数整定这个"黑箱"完全无从下手。直到把Bode图和PI参数的关系捋清楚&#xff0c;才发现原来频域分析才是解开这个谜团的钥匙。转速环本质上是个闭环系统&#xff0c;但我们要整定PI参…...

Dify工作流设计实战:从模式解析到生产部署的Awesome资源指南

1. 项目概述&#xff1a;一个为Dify工作流而生的“Awesome”资源集合如果你正在使用Dify.AI来构建你的AI应用&#xff0c;并且已经深入到工作流这个强大但略显复杂的模块&#xff0c;那么你很可能和我一样&#xff0c;经历过一段“摸着石头过河”的时期。Dify的官方文档固然详尽…...

AI原生研发不是升级,是重铸:SITS 2026核心议题深度拆解(含7个未公开技术白皮书线索)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生软件研发&#xff1a;SITS 2026核心议题深度解读 AI原生软件研发正从“AI-augmented”迈向“AI-native”范式跃迁——系统设计、开发流程、运行时契约与交付形态均以大模型为第一性原理重构。SIT…...

为什么GitHub Copilot Review Mode在2026 Q1突然下线?真相藏在奇点大会发布的《AI原生审查伦理宪章》第7.2条中……

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI原生代码审查&#xff1a;2026奇点智能技术大会Code Review新范式 在2026奇点智能技术大会上&#xff0c;AI原生代码审查&#xff08;AI-Native Code Review&#xff09;正式取代传统人工规则引擎混合…...