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

【C/C++】C语言中的内存分布

在C语言中,内存分布主要可以分为以下几个区域:
栈(Stack):由编译器自动分配和释放,存放函数的参数值、局部变量的值等。
堆(Heap):一般由程序员分配和释放,若未释放,程序结束时由操作系统回收。
全局区(静态区)(Static):存放全局变量、静态变量和常量。
文字常量区:存放常量字符串。程序结束后由系统释放。
程序代码区:存放程序的二进制代码。

下面是一个简单的例子,展示了这些区域的基本使用:

#include <stdio.h>
#include <stdlib.h>int globalVar = 1;       // 全局变量
static int staticGlobalVar = 2; // 静态全局变量void stackAndHeap() {int localVar = 3;        // 局部变量,存放在栈上int *heapVar = (int*)malloc(sizeof(int)); // 分配堆内存*heapVar = 4;            // 存储在堆上printf("Local variable: %d\n", localVar);printf("Heap variable: %d\n", *heapVar);free(heapVar);           // 释放堆内存
}int main() {stackAndHeap();// 注意:全局区和文字常量区内容在程序结束后由系统自动回收return 0;
}

在这个例子中,localVar 是一个局部变量,存放在栈上,函数调用结束后自动释放。heapVar 是通过动态分配在堆上的内存,需要手动释放避免内存泄露。globalVar 和 staticGlobalVar 是全局变量和静态变量,存放在全局区。字符串"Hello, World!"作为常量字符串存放在文字常量区。程序代码区存放程序的二进制代码。

在这里插入图片描述

内容仅供参考

请添加图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • EmguCV学习笔记 VB.Net 7.2 特征点检测
  • 微服务CI/CD实践(四)Jenkins部署及环境配置
  • 「bug」nvitop ERROR: Failed to initialize curses
  • NLP从零开始------文本中阶序列处理之语言模型(完整版)
  • 网创教程自动采集wordpress插件子比主题
  • linux系统,ubuntu安装英伟达NVIDIA4090显卡驱动
  • DHCP服务异常与IP地址管理挑战
  • 我的docker随笔44:构建nginx镜像
  • Dockerfile 实例
  • numpy 中的降维与升维
  • Typora + PicGo + Gitee 实现图片自动上传
  • 建设工程经济之工程经济(二)
  • Git和SVN了解
  • 监控平台之请求监控
  • R语言统计分析——方差分析之ANOVA模型拟合
  • Angular 响应式表单之下拉框
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • nginx 负载服务器优化
  • uni-app项目数字滚动
  • v-if和v-for连用出现的问题
  • 飞驰在Mesos的涡轮引擎上
  • 基于Android乐音识别(2)
  • 基于webpack 的 vue 多页架构
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 详解NodeJs流之一
  • 想使用 MongoDB ,你应该了解这8个方面!
  • elasticsearch-head插件安装
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 数据库巡检项
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #include<初见C语言之指针(5)>
  • #LLM入门|Prompt#3.3_存储_Memory
  • (LeetCode C++)盛最多水的容器
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET DataGridView数据绑定说明
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • ?
  • @Mapper作用
  • @NotNull、@NotEmpty 和 @NotBlank 区别
  • [20150629]简单的加密连接.txt
  • [c#基础]值类型和引用类型的Equals,==的区别
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】
  • [CSS]CSS 的背景