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

每日一C(1)C语言的内存分布

目录

代码区

常量区

全局/静态区

初始化数据段(.data)

未初始化数据段(.bss)

堆区

栈区

总结


        今天我们学习的是C语言的内存分布,以及这些分区所存储的内容和其特点。今天的思维导图如下。

        C语言作为一款直接处理硬件底层的编程语言,现实中很多嵌入式设备都通过C语言来编写程序。因为C语言核心特点就是对内存的操作,所以使程序运行在内存非常小的硬件上,大大降低了产品的生产成本。

        C语言将内存划分为分为5个区,分别为 代码区、常量区、全局/静态区、堆区、栈区 五个分区。

代码区

        代码区负责存储计算机能够执行的二进制代码文件。为了防止在程序运行时出现问题,代码区的内容是只读的,无法修改;此外,代码在程序运行前就已经确定了大小。

常量区

        存放例如字符串、数字等常量。这部分内容在程序运行时同样不可修改。

全局/静态区

        这块内存用于存储全局和静态变量,在程序整个生命周期中存在,由系统在启动时分配,结束时释放。全局/静态区分为初始化和未初始化数据段两部分。

初始化数据段(.data)

存储显式初始化的全局变量和静态变量。

未初始化数据段(.bss)

存储未初始化的全局变量和静态变量,默认值为0。

堆区

        由程序员动态分配的内存(如 malloc()calloc() 申请的空间)就落在这部分。堆区内存地址由低到高增长,这部分内存由程序员自行判断并实现 分配、释放 等操作。

        需要注意的是,堆区虽然空间大但分配不连续,访问速度较慢。

        遵循先进先出(FIFO)原则。

栈区

        栈区用于存放局部变量和函数上下文(返回地址、参数等),由系统自行实现内存分配和释放。

栈区的地址由高向低地址增长,其最大大小在编译时确定,速度快,内存分配连续,但大小有限。

        由于栈区存储的内容只在函数范围内存在,当函数执行完成,这些内容就会被销毁。

        栈区遵循先进后出(LIFO)原则,即先进入的数据最后释放。比如在函数中先定义一个局部变量,在函数执行完成后,确保函数内部没有东西调用它再进行释放。

        对栈的操作叫做通过压栈(Push)和弹栈(Pop)。

总结

        代码区存放代码;

        常量区存放字符串和数字等;

        全局/静态区分为初始化(.data)和未初始化(.bss) 来存储 全局和静态变量;

        堆区为动态分配的内存空间,先进先出(FIFO);

        栈区存储局部变量和函数上下文,先进后出(LIFO)。

        堆区和栈区并不相邻,中间有一段内存,防止二者数据发生覆盖。

        栈区只需要将栈顶指针移动即可,操作效率高;堆区需要寻找合适的内存块,效率低。

相关文章:

每日一C(1)C语言的内存分布

目录 代码区 常量区 全局/静态区 初始化数据段(.data) 未初始化数据段(.bss) 堆区 栈区 总结 今天我们学习的是C语言的内存分布,以及这些分区所存储的内容和其特点。今天的思维导图如下。 C语言作为一款直接处…...

Photoshop使用钢笔绘制图形

1、绘制脸部路径 选择钢笔工具,再选择“路径”。 基于两个点绘制一个弯曲的曲线 使用Alt键移动单个点,该点决定了后续的曲线方向 继续绘制第3个点 最后一个点首尾是同一个点,使用钢笔保证是闭合回路。 以同样的方式绘制2个眼睛外框。 使用椭…...

应用层协议:HTTP

目录 HTTP:超文本传输协议 1.1 HTTP报文 1.1.1 请求报文 1.1.2 响应报文 1.2 HTTP请求过程和原理 1.2.1 请求过程 1、域名(DNS)解析 2、建立TCP连接(三次握手) 3、发送HTTP请求 4、服务器处理请求 5、返回H…...

复习——C++

1、scanf和scanf_s区别 2、取地址&#xff0c;输出 char ba; char* p&b; cout<<*p; cout<<p; p(char*)"abc"; cout<<*p; cout<<p; cout<<(void*)p; 取地址&#xff0c;把b的地址给p 输出*p&#xff0c;是输出p的空间内的值…...

SPI通信协议(软件SPI读取W25Q64)

SPI通信协议 文章目录 SPI通信协议1.SPI通信2.SPI硬件和软件规定2.1SPI硬件电路2.2移位示意图2.3SPI基本时序单元2.3.1起始和终止条件2.3.2交换一个字节&#xff08;模式1&#xff09; 2.4SPI波形分析&#xff08;辅助理解&#xff09;2.4.1发送指令2.4.2指定地址写2.4.3指定地…...

PostgreSQL-基于PgSQL17和11版本导出所有的超表建表语句

最新版本更新 https://code.jiangjiesheng.cn/article/368?fromcsdn 推荐 《高并发 & 微服务 & 性能调优实战案例100讲 源码下载》 1. 基于pgsql 17.4 研究 查询psql版本&#xff1a;SELECT version(); 查看已知1条建表语句和db中数据关系 SELECT create_hypert…...

JavaWeb:前后端分离开发-部门管理

今日内容 前后端分离开发 准备工作 页面布局 整体布局-头部布局 Container 布局容器 左侧布局 资料\04. 基础文件\layout/index.vue <script setup lang"ts"></script><template><div class"common-layout"><el-containe…...

ArcGIS计算多个栅格数据的平均栅格

3种方法计算多个栅格数据的平均栅格 1->使用“ 栅格计算器”工具 原理就是把多幅影像数据相加&#xff0c;然后除以个数&#xff0c;就能得到平均栅格。 2-> 使用“像元统计数据”工具&#xff0c;如果是ArcGIS pro&#xff0c;则是“像元统计”工具。使用这个工具可以…...

字节开源FlowGram:AI时代可视化工作流新利器

字节终于开源“扣子”同款引擎了&#xff01;FlowGram&#xff1a;AI 时代的可视化工作流利器 字节FlowGram创新性地融合图神经网络与多模态交互技术&#xff0c;构建了支持动态拓扑重构的可视化流程引擎。该系统通过引入 f ( G ) ( V ′ &#xff0c; E ′ ) f(\mathcal{G})…...

如何选择合适的分库分表策略

选择合适的分库分表策略需要综合考虑业务特点、数据规模、访问模式、技术成本等多方面因素。以下是系统性的选择思路和关键决策点&#xff1a; 一、核心决策因素 业务需求分析 数据规模&#xff1a;当前数据量&#xff08;如亿级&#xff09;、增长速度&#xff08;如每日新增百…...

(LeetCode 每日一题)3403. 从盒子中找出字典序最大的字符串 I (贪心+枚举)

题目&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 题目&#xff1a;贪心枚举字符串&#xff0c;时间复杂度0(n)。 最优解的长度一定是在[1,n-numFriends]之间。 字符串在前缀都相同的情况下&#xff0c;长度越长越大。 C版本&#xff1a; class Solution { public:st…...

GPIO的内部结构与功能解析

一、GPIO总体结构 总体构成 1.APB2(外设总线) APB2总线是微控制器内部连接CPU与外设&#xff08;如GPIO&#xff09;的总线&#xff0c;负责CPU对GPIO寄存器的读写访问&#xff0c;支持低速外设通信 2.寄存器 控制GPIO的配置&#xff08;输入/输出模式、上拉/下拉等&#x…...

Python训练打卡Day42

Grad-CAM与Hook函数 知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 在深度学习中&#xff0c;我们经常需要查看或修改模型中间层的输出或梯度。然而&#xff0c;标准的前向传播和反向传播过程通常是一个黑盒&#xff0c;我们很难直接访问中间层的信…...

深度学习中的负采样

深度学习中的负采样 负采样&#xff08;Negative Sampling&#xff09; 是一种在训练大型分类或概率模型&#xff08;尤其是在输出类别很多时&#xff09;中&#xff0c;用来加速训练、降低计算量的方法。 它常用于&#xff1a; 词向量训练&#xff08;如 Word2Vec&#xff…...

php7+mysql5.6单用户中医处方管理系统V1.0

php7mysql5.6中医处方管理系统说明文档 一、系统简介 ----------- 本系统是一款专为中医诊所设计的处方管理系统&#xff0c;基于PHPMySQL开发&#xff0c;不依赖第三方框架&#xff0c;采用原生HTML5CSS3AJAX技术&#xff0c;适配手机和电脑访问。 系统支持药品管理、处方开…...

Java 大视界 — Java 大数据在智能安防视频监控中的异常事件快速响应与处理机制

/*Java 大数据在智能安防视频监控中的异常事件快速响应与处理机制&#xff08;简化示例&#xff09;*/// 1. Event.java - 异常事件模型 package com.security.model;public class Event {private String id;private String type; // 如: "入侵", "火警"pr…...

智慧物流园区整体解决方案

该智慧物流园区整体解决方案借助云计算、物联网、ICT 等技术,从咨询规划阶段介入,整合供应链上下游资源,实现物流自动化、信息化与智能化。方案涵盖智慧仓储管理(如自动化立体仓储系统、温湿度监控)、智慧物流(运输管理系统 TMS、GPS 监控)、智慧车辆管理(定位、调度、…...

审批流程管理系统开发记录:layui前端交互的实践

一、需求拆解与技术选型 本次开发围绕企业审批流程管理场景,需实现以下核心功能: 前端申请表单与流程进度可视化底部滑动审批弹窗交互多版本MySQL数据库支持流程数据的增删改查与状态管理技术栈选择: 前端采用LayUI框架,利用其时间线组件(lay-timeline)实现流程进度展示…...

【会员专享数据】1960—2023年我国省市县三级逐年降水量数据(Shp/Excel格式)

之前我们分享过1960-2023年我国0.1分辨率的逐日、逐月、逐年降水栅格数据&#xff08;可查看之前的文章获悉详情&#xff09;&#xff0c;是研究者Jinlong Hu与Chiyuan Miao分享在Zenodo平台上的数据&#xff0c;很多小伙伴拿到数据后反馈栅格数据不太方便使用&#xff0c;问我…...

2025年精通MVCC

今年找工作&#xff0c;无一例外又问到了MVCC这个知识点。几乎每次换工作都会被问到这个面试有用&#xff0c;工作毫无 * 用的知识。但是环境就是这样&#xff0c;既然如此&#xff0c;我们用一篇文章彻底搞懂MVCC 1.MVCC是什么 MVCC&#xff08;Multi-Version Concurrency C…...

硬路由与软路由

目录 核心区别 ⚙️ 性能与功能定位 如何选择&#xff1f; 核心区别 硬路由&#xff1a; 本质&#xff1a; 专用的硬件设备。构成&#xff1a; 厂家将特定的路由器操作系统&#xff08;通常是高度定制化、封闭或精简的&#xff09;固化在专用的硬件平台上。硬件&#xff1a…...

OpenCV C++ 心形雨动画

❤️ OpenCV C 心形雨动画 ❤️ 本文将引导你使用 C 和 OpenCV 库创建一个可爱的心形雨动画。在这个动画中&#xff0c;心形会从屏幕顶部的随机位置落下&#xff0c;模拟下雨的效果。使用opencv定制自己的专属背景 目录 简介先决条件核心概念实现步骤 创建项目定义心形结构…...

Fullstack 面试复习笔记:Java 基础语法 / 核心特性体系化总结

Fullstack 面试复习笔记&#xff1a;Java 基础语法 / 核心特性体系化总结 上一篇笔记&#xff1a;Fullstack 面试复习笔记&#xff1a;操作系统 / 网络 / HTTP / 设计模式梳理 目前上来说&#xff0c;这个系列的笔记本质上来说&#xff0c;是对不理解的知识点进行的一个梳理&…...

安卓Compose实现鱼骨加载中效果

安卓Compose实现鱼骨加载中效果 文章目录 安卓Compose实现鱼骨加载中效果背景与简介适用场景Compose骨架屏与传统View实现对比Shimmer动画原理简介常见问题与优化建议参考资料 本文首发地址 https://h89.cn/archives/404.html 背景与简介 在移动应用开发中&#xff0c;加载中占…...

使用qt 定义全局钩子 捕获系统的键盘事件

使用qt 定义全局钩子 捕获系统的键盘事件 即使焦点不在自定义软件上&#xff0c;也能够触发 以下待接口代码&#xff1a; class Hook :public QObject { Q_OBJECT public: Hook(); enum Type { CTRL_E, CTRL_W, SPACE, Enter, C };//自定义枚举&#xff0c;定义“修改”、“撤回…...

FreeType 字体信息检查工具 - 现代C++实现

文章目录 获取字体的版权信息工具简介主要特点1. 现代C实现2. 完整的功能3. 健壮的错误处理4. 国际化支持 使用说明技术亮点 获取字体的版权信息 #include <iostream> // 标准输入输出流库 #include <string> // 字符串处理库 #include <vector>…...

el-table 树形数据,子行数据可以异步加载

1、 <el-tableborder:header-cell-style"tableStyle?.headerCellStyle"ref"tableRef":data"tableData"row-key"id":default-expand-all"false" // 默认不展开所有树形节点:tree-props"{ children: children, hasC…...

【使用JAVA调用deepseek】实现自能回复

在Spring Boot系统中接入DeepSeek服务&#xff0c;并将其提供给用户使用&#xff0c;通常需要以下步骤&#xff1a; 一、准备工作 &#xff08;1&#xff09;注册DeepSeek开发者账号 访问DeepSeek官网&#xff0c;注册并创建应用&#xff0c;获取API Key。 API文档&#xff1…...

【Linux系列】rsync命令详解与实践

博客目录 高效文件同步的艺术&#xff1a;rsync 命令详解与实践rsync 命令解析rsync 的核心优势1. 增量传输&#xff1a;效率的革命2. 归档模式(-a)&#xff1a;保留文件所有属性3. 人性化输出(-h)与进度显示(--progress) 实际应用场景1. 文件备份与版本管理2. 跨设备同步3. 大…...

Windows系统工具:WinToolsPlus 之 SQL Server Suspect/质疑/置疑/可疑/单用户等 修复

数据库在数据库列表状态是 Suspect/质疑/置疑/可疑/单用户等 非正常状态时&#xff0c; 使用WinToolsPlus 数据库页签 先设置 数据源 &#xff0c; 选择 需要清理日志的数据库&#xff0c; 点击 Suspect/质疑/置疑/可疑/单用户 按钮即可进修复。 修复过程会有数据库服务停止和启…...