C语言学习笔记:内存的五大分区

本文介绍了C语言中进程在内存的五个分区:代码段(text)、数据段(data)、静态数据段(bss)、堆(heap)和栈(stack)。讨论了各分区的功能和变量类型,包括全局变量、局部变量和块变量的存储位置、生命周期和作用范围。

在C语言中,进程可在内存中分别存入五大分区:

1、text:也称为代码段,其中主要用于存放二进制指令、常量、被const修饰过的初始化过的全                      局变量、静态局部变量;该分区为只读权限,若强制修改将会产生段错误。

2、data:也称为数据段,其中主要用于存放初始化过的全局变量、静态局部变量。

3、bss:也称为静态数据段,主要用于存放未初始化过的全局变量、静态局部变量 。

                Ps:该段内存在进程运行前自动清理为0

4、heap:也称为堆,该段主要由程序员手动管理,其存储空间足够大,但使用过程相对复杂。

5、stack:也称为栈,主要用于存放局部变量、块变量,由系统自动申请、释放内存,存储空间                      相对较小,但使用过程更

以上提到了一些变量,下面引入变量的分类:

        变量在分类时,主要按照存储位置、生命周期以及作用范围三个方面进行区分。

        1、全局变量:即定义在函数外的变量,存储于数据段及静态数据段(data\bss);其生命周期由程序开始维持到程序结束;在整个程序任意位置均可调用。如下图定义,num定义于主函数main()之外,则num为一个全局变量。

#include<stdio.h>

int num = 10;

int main()
{
    printf("%d",num);
}

        2、局部变量:与全局变量想法,定义在函数内的变量为局部变量;存储于栈分区(stack);其生命周期仅由所在函数开始维持到所在函数结束;也仅可在所在函数内使用。如下图定义,flog定义于主函数main()内,则其为主函数内的一个局部变量,仅可在主函数内调用

#include<stdio.h>

int main()
{
    int flog = 5;
    flog++;
    printf("%d\n",flog);
}

        3、块变量:即定义在语句块内变量;存储于栈分区(stack);由本函数开始维持到到本函数结束;且仅可在语句块(if\for\while)内使用。如下图定义,近定义在for函数内的变量i则为一个块变量。

#include<stdio.h>

int main()
{
    int x = 0;
    for(int i=0; i<10; i++)
    {
        x += i;
    }
    printf("%d",x);
}

        注意:局部变量会屏蔽同名的全局变量,块变量会屏蔽同名的局部变量和全局变量

                   为代码阅读方便,全局变量建议首字母大写,局部、块全部小写

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值