关于STM32能否使用malloc申请动态内存的问题
来源:互联网 发布:mysql 数据库设计模式 编辑:程序博客网 时间:2024/05/21 19:28
首先,malloc( )属于标准C语言函数,当然可以在单片机上使用,如STM32可以先在启动文件中设置heap的大小,再使用动态内存分配:
Heap_Size EQU 0x00000200 \\也就是 512字节;
但是一般单片机的内存都比较小,而且没有MMU,malloc 与free的使用容易造成内存碎片。而且可能因为空间不足而分配失败,从而导致系统崩溃,因此应该慎用,或者自己实现内存管理。
以下摘自网络:
在函数中使用malloc,如果是大的内存分配,
而且malloc与free的次数也不是特别频繁,使用malloc与free是比较合适的,
但是如果内存分配比较小,而且次数特别频繁,那么使用malloc与free就有些不太合适了。
因为过多的malloc与free容易造成内存碎片,致使可使用的堆内存变小。
尤其是在对单片机等没有MMU的芯片编程时,慎用malloc与free。
如果需要对内存的频繁操作,可以自己实现一个内存管理。
使用动态内存分配,应分不同的应用场合。
对于在操作系统上运行的程序,实际的物理内存分配与释放使用操作系统来实现的,即使程序调用了 malloc和free物理内存并不会马上变化。物理内存的变化,直到系统的内存管理操作时才发生。
对于裸机跑在MCU上的程序,分配与释放内存都会造成实际物理内存的变化。因为此时物理内存的分配是由自己实现的,而内存管理我们自己并没有去做。这样,盲目的使用malloc与free恰恰并不好,反而会造成内存的不恰当使用。甚至于内存溢出。
所以,动态内存的使用前提是有一套好的内存管理方法,这样动态内存的使用才会合理使用内存。如果没有合适的内存管理代码,还是用静态内存好一些。
阅读全文
0 0
- 关于STM32能否使用malloc申请动态内存的问题
- 关于STM32能否使用malloc申请动态内存的问题
- stm32 使用malloc申请内存和free释放内存造成的内存碎片测试
- malloc动态申请内存
- 关于malloc申请内存
- 内存申请malloc可能引发的问题
- 关于用函数指针参数申请动态内存的问题
- 关于用函数指针参数申请动态内存的问题
- 关于指针和数组对申请内存malloc和作为参数传递的一些问题
- malloc与free 动态内存的申请与释放
- 动态申请内存new和malloc的区别
- 关于内存申请的问题
- malloc,free动态申请释放内存机制
- 关于动态申请内存的动机
- 关于动态内存的申请和释放
- 让Linux使用malloc申请更多的内存
- 指针动态申请内存的问题
- STM32堆区分配内存--malloc的使用
- 首先谢谢大家的关注!
- 基于深度学习的图像语义分割技术概述之4常用方法
- 【学习】身份证号获取个人信息
- 将一组阿拉伯数字转换成中文大写数字
- 矩阵快速幂练习
- 关于STM32能否使用malloc申请动态内存的问题
- 1981年柏林的德国逻辑思考学院面试题,逆天5*5推理题!
- 【Kotlin】基础语法学习
- 测试的一些基本
- python中 subprocess shell=False 与shell=True的区别
- sqlilabs 下的less7
- View基本知识
- Java两种线程的创建
- c++网络编程(1)