嵌入式算法:C语言内存池设计和实现

目录  

        参考:

        常见内存使用错误:

        内存区分类:


在嵌入式平台部署算法,内存问题是不可避免的问题。主要有两方面:

1、节省内存;

2、STM32动态内存分配和回收的特殊性(需要程序员有效管理);

参考:

        51CTO的课程《C语言内存管理精讲-高手进阶课》

常见内存使用错误:

        1、内存申请未成功,就使用;

        2、内存申请成功,但是未初始化;

        3、内存初始化成功,但是访问越界;

        4、忘记释放内存或者释放一部分(内存泄露);

/*
malloc:正常初始化
calloc:可以初始化为0
realloc:可以重新调整内存空间大小
*/

内存区分类:

        1、栈区(stack),编译器自动分配和释放,包括局部变量、函数体中定义的变量、函数参数。生命周期随着定义而开始,随着函数的结束而结束。栈空间很小,而且栈空间大小由编译器确定,还可以更改,例如在windows的Visual Studio下是1M,超过会提示stack over。当在STM32 F4XX的时候由宏确定。系统分配的是连续的内存区域,速度快。

        2、堆区(heap),需要程序员自己管理。堆空间和64/32位、编译器有关,受限于有效的虚拟内存。32位2G以内,64位128G以内。不连续的内存区域,速度慢,容易产生内存碎片(需要内存池)。

        3、全局区(静态区),全局变量(main以外的变量)、static静态变量,地址连续。在程序结束的时候才释放。

        4、常量区,最常用的是字符串常量。字符串在常量区。

char *p = "AAAA";//p在全局静态区,"AAAA"在常量区

int main()
{
    char *p1 = "AAAA";//p1在栈区,"AAAA"在常量区,地址和p相同
    char [] = "AAAA"; //p1在栈区,"AAAA"在栈区
};

你可能感兴趣的:(控制\SLAM\机器人学,软件开发相关的技能,c语言)