[其他ST产品] STM32 内存分配、堆栈以及变量存储位置理解与分析

[复制链接]
phoenixwhite 发表于 2023-8-4 17:10 | 显示全部楼层
按FIFO或FILO的方式进行数据读写,是软件层面的意义
sanfuzi 发表于 2023-8-4 18:50 | 显示全部楼层
栈的大小应大于预计的最大函数调用深度和中断嵌套层数。堆的大小应根据需要的动态内存分配量进行评估。
mattlincoln 发表于 2023-8-4 20:14 | 显示全部楼层
全局变量在整个程序中都可见,存储在数据区或程序存储器
wengh2016 发表于 2023-8-4 20:37 | 显示全部楼层
堆栈是一种用于存储函数调用和局部变量的内存区域。在STM32中,堆栈通常位于SRAM中的特定区域
phoenixwhite 发表于 2023-8-4 21:39 | 显示全部楼层
STM32芯片通常具有不同类型的内存,例如片上内存(SRAM)和闪存(Flash)。SRAM用于数据存储,包括全局变量、静态变量和动态分配的内存(如堆内存)。Flash用于存储程序代码。
phoenixwhite 发表于 2023-8-4 22:43 | 显示全部楼层
STM32单片机闪存存储器里存储的是哪些内容?
pentruman 发表于 2023-8-5 10:49 | 显示全部楼层
堆和栈的大小都应该合理设置。              
eefas 发表于 2023-8-5 13:42 | 显示全部楼层
合理选择变量的作用域可以减小内存占用并提高代码的可读性和维护性。
belindagraham 发表于 2023-8-5 14:31 | 显示全部楼层
将变量的作用域限制在最小范围内,可以避免不必要的内存占用和命名冲突。
modesty3jonah 发表于 2023-8-7 16:44 | 显示全部楼层
堆栈区与一般的数据存储区有何异同?
beacherblack 发表于 2023-8-7 17:50 | 显示全部楼层
通过合理管理内存,可以提高系统的性能和稳定性,并避免由于内存相关问题引起的错误。
lzbf 发表于 2023-8-14 08:15 | 显示全部楼层
在STM32上,变量可以存储在不同的内存区域中,具体取决于其声明方式和链接器设置。

全局变量:全局变量在编译时分配内存,并且默认情况下存储在SRAM中。可以使用__attribute__((section("SectionName")))来指定将全局变量放置在特定的内存段中。

静态变量:静态变量也在编译时分配内存,并且默认情况下存储在SRAM中。与全局变量类似,可以使用__attribute__((section("SectionName")))指定静态变量的存储位置。

局部变量:局部变量通常存储在堆栈中,随着函数的调用和返回而分配和释放。对于需要长时间存储的局部变量,可以使用static关键字将其转化为静态局部变量,并将其存储在SRAM中。

动态分配的内存(堆内存):动态分配的内存使用堆进行管理。可以使用标准C库函数如malloc()和free()来申请和释放堆内存。堆内存通常位于SRAM中。
linfelix 发表于 2023-8-14 11:15 | 显示全部楼层
STM32微控制器通常具有不同类型的内存,包括片上存储器(SRAM)和闪存(Flash)存储器。SRAM用于存储变量和堆栈,而Flash存储器用于存储程序代码。在编程时,需要注意将变量和数据正确地分配到适当的内存区域。
wilhelmina2 发表于 2023-8-14 17:09 | 显示全部楼层
了解内存分配、堆栈和变量存储位置在编写STM32应用程序时非常重要。
huangchui 发表于 2023-8-14 20:47 | 显示全部楼层
STM32单片机闪存存储器里存储的是哪些内容?
Undshing 发表于 2023-8-14 23:05 | 显示全部楼层
静态变量是存在堆区还是常量区啊?
kkzz 发表于 2023-8-15 12:56 | 显示全部楼层
静态变量在函数内部可见,存储在代码区或数据区;局部变量只在函数内部可见,存储在栈区或寄存我们需要掌握这些概念的含义、特点和用途,并在编程中合理运用,提高程序性能和可靠性。
Bowclad 发表于 2023-8-15 23:36 | 显示全部楼层
nomomy 发表于 2023-8-4 15:33
堆栈的工作方式类似于数据结构中的栈。

这两个栈不是一样的概念吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部