1. 堆(Heap):堆用于动态内存分配,它在程序运行时动态地分配和释放内存。在Ubuntu上,堆的起始地址是0x08048000;而在stm32上,堆的起始地址是根据具体芯片的存储器布局决定的,通常位于片内SRAM或外部RAM。
2. 栈(Stack):栈用于存储局部变量、函数返回值和函数调用时的上下文信息。在Ubuntu上,栈的起始地址是高地址向低地址增长的;而在stm32上,栈的起始地址是根据具体芯片的存储器布局决定的,通常也是高地址向低地址增长的。
3. 全局变量(Global Variables):全局变量是在程序开始运行时就分配的,其地址在编译时就确定下来。在Ubuntu上,全局变量通常存储在数据段(Data Segment)或BSS段(Block Started by Symbol,初值为0的全局变量所在的段);在stm32上,全局变量通常存储在片内SRAM或外部RAM的数据段。
4. 局部变量(Local Variables):局部变量通常存储在栈中。在Ubuntu上,局部变量的地址在函数调用时动态分配,并且随着函数的退出而释放;在stm32上,局部变量的地址也是在函数调用时动态分配的,但是由于栈的地址增长方向不同,地址的分配顺序也有所差异。
归纳出Ubuntu、stm32下的C程序中堆、栈、全局、局部等变量的分配地址,进行对比分析
最新推荐文章于 2023-12-21 13:03:34 发布
本文讨论了在Ubuntu和STM32平台上,堆(动态内存)、栈(局部变量存储)以及全局变量的内存分配和存储位置,强调了两者在内存布局上的区别。
摘要由CSDN通过智能技术生成