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

C程序内存空间

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

C程序内存空间

在正式接触linux系统编程前我在这个章节主要介绍c程序在计算机当中的存储状态,作为一名合格c程序员就必须去了解内存,下面让我们一起来了解c程序计算机的内存中的分布状态。

上图就清晰的表示了c程序在内存当中的分布状态,

text文本段:

        从内存空间低地址开始存放的为c程序代码,也称代码段、正文段,在程序运行过程中由磁盘加载到内存当中。

radata只读数据段:

        radata为只读数据段,存放只读属性的变量,如常量和const声明的变量等。

Initdata初始化数据段:

        Initdata为初始化过的可读可写的变量。

.bss未初始化数据段

        bss段表示未初始化的变量,存放程序当中未初始化的变量。

heap堆:

        heap堆是由malloc,new申请的空间,由程序员自行申请释放,在申请后要进行free释放。

stack栈:

        stack栈空间是函数执行过程中产生的临时变量以及函数参数等,栈由系统自行进行分配与释放,栈申请空间由上向下。

下面我们用一段c—demo表示一下其存储位置。

#include  

#define PI = 3.1415    //常量 .radata只读数据区 

int a = 0;    //.Initdata初始化数据段

char *p1;    //.bss段未初始化数据段

static a1 = 0;    //.静态存储区-Initdata段 

const int a2 = 10; //.radata只读数据段

int main(int argc, char *argv[])  
{
        int b;    // 栈

        char s[]="aaa";    //栈

        char *p;    //栈

        char *str = "123456";    //str存放在栈上 "123456"存放在常量区-.radata段

        static int a2; //全局静态存储区-.bss段

        p = (int *)malloc(sizeof(int *));    //堆空间

        free(p);    //释放p空间

        return 0;
}

上面的图片和demo清晰的表达了c程序在内存当中的空间分配,大家可以结合理解。

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

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

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