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 <stdio.h> 

#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\0"存放在常量区-.radata段

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

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

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

        return 0;
}

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值