归纳出Ubuntu、stm32下的C程序中堆、栈、全局、局部等变量的分配地址,进行对比分析

本文讨论了在Ubuntu和STM32平台上,堆(动态内存)、栈(局部变量存储)以及全局变量的内存分配和存储位置,强调了两者在内存布局上的区别。
摘要由CSDN通过智能技术生成


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上,局部变量的地址也是在函数调用时动态分配的,但是由于栈的地址增长方向不同,地址的分配顺序也有所差异。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值