美文网首页工作生活简友广场阿九讲学——FreeRTOS
阿九讲学(八)——嵌入式内存分配

阿九讲学(八)——嵌入式内存分配

作者: 吴记维修 | 来源:发表于2019-07-03 00:08 被阅读0次

下层基础决定上层建筑,在开始接下来的学习之前,我们先来了解一下嵌入式内存分配的一些基础知识。

我们知道,关于存储器可以分为许多种类,它们分别有:

1、寄存器(register)

2、随机存储器(RAM)

3、只读存储器(ROM)

4、可擦除存储器(EEPROM)

5、闪存(Flash)

我们常说的内存,其实指的就是随机存储器(RAM)。一个C/C++程序中,内存分布分为几个部分:

栈(stack):栈又称堆栈,是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出(FIFO)特点,所以栈特别方便用来保存/恢复调用现场。

堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)

bss段:(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域。bss是英文Block Started by Symbol的简称。bss段属于静态内存分配。 

data段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。

text段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域,一般存放在ROM中。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读(某些架构也允许代码段为可写,即允许修改程序)。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

在嵌入式应用程序中,编译出来的生成文件里面都会有一个.map文件。这个文件是根据链接脚本文件编译生成的文件。它里面描述了代码函数变量在内存中的分配信息。我们可以查看这个.map文件来查看函数和变量在内存里面的具体位置。

什么是静态内存分配(Static Memory Allocation)和 动态内存分配(Dynamic Memory Allocation)?

顾名思义,静态内存分配就是在程序运行前,就已经对内存进行分配好,运行过程中不会再改变得内存分配方法。比如,我在代码里面给栈分配256个字节的大小空间,在整个代码的运行生命周期里,这个栈的空间大小不能再改变。

动态内存分配是在程序运行时,进行内存分配的内存分配方法。它允许程序运行时,给需要的变量和开辟内存空间。程序结束后,回收所开辟的内存。C语言有两个函数就是专门干这个活,它们分别是malloc() 和 free()函数。

如果你对malloc() 和 free()函数不是很了解,建议你先提前回去复习一下。因为在接下来的学习内容中,会用到两个函数。子曾经曰过:温故知新,可以为师矣。多回顾所学过的知识,你就是下一位大师!

相关文章

  • 阿九讲学(八)——嵌入式内存分配

    下层基础决定上层建筑,在开始接下来的学习之前,我们先来了解一下嵌入式内存分配的一些基础知识。 我们知道,关于存储器...

  • 二.内存分配

    1.内存分配的简单说明 在基本的嵌入式rtos系统中,推荐使用的内存分配算法是tlsf。在gcc中,使用的是ptm...

  • 阿九讲学(十)——FreeRTOS堆内存管理(二)

    前面介绍了FreeRTOS堆内存管理实现,总共有5种实现分别在heap_1.c,heap_2.c,heap_3.c...

  • 阿九讲学(九)——FreeRTOS堆内存管理(一)

    从FreeRTOS V9.0.0开始内核对象既可以在编译的时候静态分配,也可以在运行时动态分配。为了尽可能让Fre...

  • vxworks内存管理(一)

    vxworks中内存分配采用最先适配法,提供2种虚拟内存接口。 5.1 基本概念 嵌入式系统的存储器,主要有内部/...

  • C语言中内存分配

    C语言中内存分配 在任何程序设计环境及语言中,内存管理都十分重要。在目前的计算机系统或嵌入式系统中,内存资源仍然是...

  • 《C语言》malloc函数使用

    动态分配、静态分配 静态分配:计算机随机自动分配内存,周期结束后自动释放内存动态分配:手动分配内存,手动释放内存 ...

  • (二)C语言之动态内存分配

    (二)C语言之动态内存分配 一、静态内存分配 定义是指定分配的内存长度就是静态内存分配,是在栈内存中分配 二、C语...

  • javascript内存管理

    内存声明周期 分配你所需要的内存 使用分配的内存(读写) 不再需要时释放内存 内存分配 javascript在声明...

  • docker 的资源分配

    内存分配 -m 或者--memory :分配内存--memory-swap:分配临时内存docker run -i...

网友评论

    本文标题:阿九讲学(八)——嵌入式内存分配

    本文链接:https://www.haomeiwen.com/subject/xchxhctx.html