嵌入式算法: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"在栈区
};

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KPer_Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值