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

C内存布局

一、变量作用域与存储类别

根据定义位置和存储方式,变量可分为以下几种类型:

int degree = 0; // 全局变量,文件作用域(其他文件声明后可引用) static int cnt = 0; // 静态全局变量,文件作用域(仅当前文件可访问) int main() { int times = 0; // 自动局部变量,函数作用域,动态存储 static double price = 5.0; // 静态局部变量,函数作用域,静态存储 // ... }

变量分类总结

变量类型作用域存储位置生命周期初始化
全局变量整个程序数据区程序运行期间默认0或指定值
静态全局变量当前文件数据区程序运行期间默认0或指定值
自动局部变量函数内部栈区函数执行期间未初始化,值不确定
静态局部变量函数内部数据区程序运行期间默认0或指定值(仅一次)

二、C程序内存布局详解

不同操作系统对C程序的内存布局安排略有不同,但基本结构相似。以下以Linux系统为例,详细解析进程的内存布局:

2.1 代码段(Text Segment)

  • 内容:CPU执行的机器指令和只读常量

  • 特性

    • 只读属性,防止程序意外修改指令

    • 可共享,多个进程可共享同一代码段副本

    • 大小固定,在程序加载时确定

2.2 数据段(Data Segment)

数据段分为两部分:

2.2.1 已初始化数据段
  • 存储内容

    int global_init = 100; // 已初始化全局变量 static int static_init = 200; // 已初始化静态变量 const int const_val = 300; // 常量(可能在此段或代码段)
2.2.2 BSS段(Block Started by Symbol)
  • 存储内容

    int global_uninit; // 未初始化全局变量 static int static_uninit; // 未初始化静态变量 char buffer[1024]; // 未初始化大数组
  • 特点:程序启动前由系统自动初始化为0

2.3 堆区(Heap)

// 堆内存动态分配示例 int *arr = (int*)malloc(100 * sizeof(int)); // 分配100个int空间 if (arr != NULL) { // 使用分配的内存 for (int i = 0; i < 100; i++) { arr[i] = i * 2; } free(arr); // 必须手动释放 }

堆内存管理要点

  1. 分配机制:系统维护空闲内存链表,按需分配

  2. 内存碎片:频繁分配释放可能产生碎片

  3. 性能开销:涉及系统调用和用户态/内核态切换

  4. 内存泄漏:忘记释放会导致内存泄漏

2.4 栈区(Stack)

int factorial(int n) { // 参数n在栈中 if (n <= 1) { return 1; // 返回值通过寄存器或栈传递 } int result; // 局部变量,在栈中分配 result = n * factorial(n-1); // 递归调用,每次调用创建新栈帧 return result; }

栈的特点

  • 自动管理:函数调用时分配,返回时释放

  • 后进先出:适合函数调用和返回

  • 大小有限:通常几MB,过度使用会导致栈溢出

  • 高速访问:比堆访问速度快

三、字节序:大端与小端模式

3.1 基本概念

在计算机系统中,多字节数据的存储方式分为两种:

模式特点典型系统
大端模式高位字节在低地址,低位字节在高地址PowerPC, IBM, Sun, 网络协议
小端模式低位字节在低地址,高位字节在高地址x86, DSP
http://www.jsqmd.com/news/342863/

相关文章:

  • 从选型到部署,实测 OpenTeleDB 在高并发更新场景下的真实表现
  • 基于大数据的美食推荐分析系统毕业设计任务书
  • [信息论与编码理论专题-19]:信息熵的量化,通俗易懂!
  • 寒假集训Week1
  • 【毕业设计】基于django+大数据平台的食物营养成分分析与推荐系统的设计与实现(源码+文档+远程调试,全bao定制等)
  • vmware 虚拟机共享文件夹的自动挂载命令
  • [信息论与编码理论专题-20]:数据、信息、编码、信号的区别与关联
  • TypeScript 入门到精通:让你的 JavaScript 代码更具可维护性
  • 2026年郑州咖啡豆烘焙机厂家最新推荐榜单:全自动咖啡烘焙机、大型全自动咖啡豆烘焙机产线、200公斤级咖啡豆烘焙机产线、商用咖啡豆烘焙机、郑州蓝景以全品类适配登榜 - 海棠依旧大
  • 【计算机毕业设计案例】基于django+大数据平台的食物营养成分分析与推荐系统的设计与实现大数据技术和Django框架的健康饮食推荐平台(程序+文档+讲解+定制)
  • 别再一对一去问了:Find the Celebrity 本质是一次“幸存者筛选”
  • dom操作
  • Java实习模拟面试实录:广州小厂高频JVM+并发+MySQL+MQ十连问深度解析
  • 【探索实战】监控、安全与边缘场景的深度落地 - 指南
  • 【时时三省】(C语言基础)结构体的内存对齐
  • 数据平台全景与角色分工——OLTP、OLAP、批/流与数据湖的版图与边界
  • 中国香港股市估值:国际金融中心的市场特点
  • C语言:2026.2.2 (链表)
  • Halo Docker 迁移方式
  • Servlet 进阶!生命周期+3种创建方式+前后台传参,一篇吃透
  • 6款AI论文神器实测:真实参考文献、查重率低、原创度高,轻松搞定论文! - 麟书学长
  • Novel-Plus has business logic vulnerabilities.
  • 程序员入行AI大模型应用开发必须学算法吗?2026最新AI大模型应用开发的核心技术学习线路看这里
  • 【毕业设计】基于springboot+大数据的果园管理系统(源码+文档+远程调试,全bao定制等)
  • 7.4 Kubernetes存储故障排查:PV挂载失败、存储类问题诊断技巧
  • 大模型Agent Skills学习路线:从技能市场到数据预测,一篇搞定
  • 大数据计算机毕设之基于springboot+大数据的果园管理系统_数据可视化大屏分析系统(完整前后端代码+说明文档+LW,调试定制等)
  • 7.3 Kubernetes网络故障排查:CNI插件、Service、Ingress问题诊断
  • 告别金鱼记忆:为AI助手构建人类级记忆系统的完整指南
  • 7.2 Kubernetes备份恢复实战:etcd数据备份与集群灾难恢复方案