学习C语言的5大内存分区

在C语言中,内存被划分为几个不同的区域,这些区域在程序运行时用于存储不同类型的数据,通常可以归纳为以下5个主要的区域:

  1. 代码区(Code Area/Text Segment
    1. 存储程序执行的机器代码,也就是CPU执行的指令。
    2. 通常,代码区是只读的,以防止程序意外地修改其指令。
    3. 该区域由操作系统和编译器管理。
  2. 全局/静态存储区(Global/Static Storage Area/Data Segment
    1. 存储全局变量和静态变量(包括静态局部变量)。
    2. 初始化的全局/静态变量在程序开始前被分配空间并初始化,未初始化的会被默认初始化为0(对于整型)或空(对于字符指针)。
    3. 全局/静态存储区在程序的整个生命周期内都存在。
  3. 常量存储区(Constant Storage Area
    1. 存储常量,如使用const关键字声明的变量。
    2. 常量存储区也是只读的,防止程序修改常量值。
    3. 有时,常量存储区被视为全局/静态存储区的一部分。
  4. 堆区(Heap Area
    1. 由程序员分配和释放(通过malloc、calloc、realloc和free等函数)。
    2. 如果程序员忘记释放已分配的内存,可能会导致内存泄漏。
    3. 堆的大小取决于可用系统内存。
  5. 栈区(Stack Area
    1. 存储局部变量和函数调用的信息(如返回地址、参数等)。
    2. 每次函数调用时,都会在其栈帧上分配空间来存储局部变量。
    3. 栈的大小是有限的,如果栈溢出(如通过无限递归或分配过大的局部变量),程序可能会崩溃。
    4. 栈上的数据在函数返回时自动被销毁(或称为“弹出栈”)。

一个简单的示例如下:

#include <stdio.h>
#include <stdlib.h>
 
int global_var = 1; // 全局变量,位于全局/静态存储区
 
int main() {
    int stack_var = 2; // 局部变量,位于栈
 
    int *heap_var = malloc(sizeof(int)); // 动态分配内存,位于堆
    *heap_var = 3;
 
    // 常量字符串存储于常量存储区
    puts("Hello, World!");
 
    // 注意释放动态分配的内存,避免内存泄露
    free(heap_var);
 
    return 0;
}

同时,这些区域的划分和命名在不同的编译器和操作系统中可能会有所不同,但基本概念是相似的。理解这些内存区域有助于更好地管理C语言程序的内存。

 

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值