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

来源:互联网 发布:java初级编程题目 编辑:程序博客网 时间:2024/05/29 09:13

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

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

静态变量:定义时使用 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 0
原创粉丝点击