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

C语言中内存布局(内存模型)是怎样的?

本文将以图示解释C语言中的内存模型,并同时举出例子方便理解 

        C 语言中的内存模型指的是程序在运行时如何组织和管理内存。下面是一个 C 语言内存布局 的示意图: 

解释:

命令行参数和环境变量:在程序启动时由操作系统传递,位于栈的上方。

栈:用于存储局部变量、函数参数、返回地址,增长方向是从高地址向低地址。

堆:用于动态内存分配(如 malloc),增长方向是从低地址向高地址。

数据段

.data(已初始化数据):已初始化的全局变量和静态变量。

.bss(未初始化数据):未初始化的全局变量和静态变量,默认初始化为 0。

代码段:存放可执行的程序代码,通常是只读的。

示例代码:

#include <stdio.h>
#include <stdlib.h>

int global_var = 10;        // 已初始化的全局变量(数据段 .data)
static int static_var = 20; // 已初始化的静态变量(数据段 .data)
int uninit_global_var;      // 未初始化的全局变量(数据段 .bss)
static int uninit_static_var; // 未初始化的静态变量(数据段 .bss)

void func() {
    int stack_var = 30;  // 局部变量(栈区)
    printf("栈区局部变量地址: %p\n", (void*)&stack_var);
}

int main() {
    int local_var = 40; // 局部变量(栈区)
    char *heap_var = (char *)malloc(50 * sizeof(char)); // 动态分配内存(堆区)

    printf("栈区 - 局部变量地址: %p\n", (void*)&local_var);
    printf("堆区 - 动态分配内存地址: %p\n", (void*)heap_var);
    printf("BSS段 (.bss) - 未初始化的静态变量地址: %p\n", (void*)&uninit_static_var);
    printf("BSS段 (.bss) - 未初始化的全局变量地址: %p\n", (void*)&uninit_global_var);
    printf("数据段 (.data) - 已初始化的静态变量地址: %p\n", (void*)&static_var);
    printf("数据段 (.data) - 已初始化的全局变量地址: %p\n", (void*)&global_var);
    printf("代码段(函数地址): %p\n", (void*)&func);
    

    free(heap_var); // 释放动态分配的内存

    return 0;
}

运行结果:

         通过比较地址大小,我们可以很直观地看到内存布局高地址到低地址的情况。


栈区 - 局部变量地址: 0x7ffc89f76b34
堆区 - 动态分配内存地址: 0x55b3c5ea7260
数据段 (.data) - 已初始化的静态变量地址: 0x55b3c5e83008
数据段 (.data) - 已初始化的全局变量地址: 0x55b3c5e83004
BSS段 (.bss) - 未初始化的静态变量地址: 0x55b3c5e83010
BSS段 (.bss) - 未初始化的全局变量地址: 0x55b3c5e8300c
代码段(函数地址): 0x55b3c5c7f699

相关文章:

  • 一周热点-OpenAI 推出了 GPT-4.5,这可能是其最后一个非推理模型
  • 仿真新能源充电桩管理系统
  • Linux16-数据库、HTML
  • 人工智能(AI)与 生命体智能的本质差异
  • Office/WPS接入DeepSeek等多个AI工具,开启办公新模式!
  • 【Raspberry Pi 5 测评】无显示器上手指南
  • .NET Core全屏截图,C#全屏截图
  • Windows 如何开启和使用FTP服务
  • 从零开始训练小型语言模型之minimind
  • cannon g3810打印机设置
  • Python自学指南:从入门到进阶(第一天)
  • Mysql的卸载安装配置以及简单使用
  • 【GPT入门】第3课 客服会话质检(思维链)
  • SGLang Router:基于缓存感知负载均衡的数据并行路由实践
  • 约束问题的最优性条件
  • 小迪安全-27-php开发,tp框架,路由访问,对象操作,内置过滤,核心漏洞
  • MoonSharp 文档一
  • 六十天前端强化训练之第十四天之深入理解JavaScript异步编程
  • 硬件小知识之升压电路--1
  • 驱动 AI 边缘计算新时代!高性能 i.MX 95 应用平台引领未来
  • 浦项建设中国有限公司网站/被忽悠去做网销了
  • 网站开发语言查看器/营销网络是啥意思
  • 搭建网站商城/专业网页设计和网站制作公司
  • 政府网站集约化建设 总结/seo和网络推广有什么区别
  • 深圳大学网站建设/代发新闻稿的网站
  • 建设免费电影网站/seo优化网站优化排名