栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

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

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

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

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

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

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

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

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

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

#include

int num = 10;

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

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

#include

int main()
{
    int flog = 5;
    flog++;
    printf("%dn",flog);
}

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

#include

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1022278.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号