嵌入式学习笔记 一:内存分部

内存分部如下图所示
这里写图片描述
内存分部

代码段:存放指令
数据段:存放局部变量、形参、全局变量、静态变量

静态变量:定义时使用 static
关键字定义,只初始化一次,之后不会再被调用时不再初始化,如果在定义时不进行初始化,数类型自动初始化为0,字符型自动初始化为空字符,局部静态变量之作用于所属局部函数,但是所占内存空间不会被释放。

static 修饰的变量(静态)变量作用范围在该变量所在的最大范围内。
static 全局变量 —–只作用在该文件程序中
static 局部变量 —–只作用在该函数内
static 函数 —–该函数只能作用在该文件程序中

数据段:存放全局变量、静态变量

数据段里有.data .bss .rodata三段,其各段的作用如下
.data 存放初始化的全局变量和静态变量
.bss 存放未初始化的全局变量和静态变量
.rodata 存放常量

堆:
动态分配空间(malloc(),calloc(),realloc();)
内存从低位开始分配,空间使用完后,一定要使用free()释放,如果不释放,这空间一直存在到程序退出。

void *malloc(size_t size);向系统申请size个字节的内存空间,返回所申请内存的起始指针地址,
void *calloc(size_t nmemb, size_t size); 申请空间 nmemb*size大小空间,自动清0。nmemb是申请空间的个数,size是申请内存的大小。
void *realloc(void *ptr, size_t size); 当初始申请的内存不够用时,使用realloc调整空间大小。

栈:存放局部变量、形参
自动分配内存,地址从高位开始,当局部变量或形参生命结束时自动释放
函数{}中定义的变量(局部变量),一声明好,系统自动分配一个空间,当局部变量生命一结束,系统自动把空间回收。

形参:

int f(int a,int b)
{
//当f函数被调用时,参数传递给a和b,a、b就是形参
}

例:

 test.c
        -------------
        struct A
        {
            int a;
            int b;
        };

        int a=4;   //数据段.data
        int c;    //数据段.bss

        struct A * f(int q)
        {
            static int w=1;   //数据段.data
            static int d;    //数据段.bss 
            int aa=4; //栈
            struct A *p=malloc(sizeof(struct A));    //堆

            return p;       
        }

        int main()
        {
            struct A p1;    //栈
            struct A *pp=f();
        }

博客的文章都会发到个人订阅号上,欢迎关注
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值