关于嵌入式程序中malloc和free函数的问题。
在单片机程序中,如果系统进入一个函数,那么堆栈指针SP会增加,增加的数量取决形参和函数中申请的局部变量。也就是说系统要把形参和动态变量压入堆栈。如果这个时候用malloc...
在单片机程序中,如果系统进入一个函数,那么堆栈指针SP会增加,增加的数量取决形参和函数中申请的局部变量。也就是说系统要把形参和动态变量压入堆栈。如果这个时候用malloc函数再申请一段空间,那SP指针是不是还要相应的增加?
在函数执行完之前是不是要free掉申请的空间?因为系统跳出函数需要将局部变量和形参弹栈,为了不影响对局部变量和形参的弹栈,是不是必须在系统跳出函数之前弹栈?
不知道我有没有表达清楚,或者我的表达中有没有什么问题。
兄弟C语言学的比较业余,各位看官轻拍。。。 展开
在函数执行完之前是不是要free掉申请的空间?因为系统跳出函数需要将局部变量和形参弹栈,为了不影响对局部变量和形参的弹栈,是不是必须在系统跳出函数之前弹栈?
不知道我有没有表达清楚,或者我的表达中有没有什么问题。
兄弟C语言学的比较业余,各位看官轻拍。。。 展开
展开全部
系统的内存空间分为堆空间和栈空间。
如你所说的,进入一个函数之间形参和局部变量都是有栈空间分配,SP指针会相应增加
但是对于由malloc动态分配的内存是在堆中分配,并不是你所说的也是从栈中分配,所以用malloc分配内存并不会影响SP。
malloc申请的空间必须有free进行释放,在函数内申请的空间不一定需要在函数推出前释放,只要头指针没有丢失函数返回后再释放也是可以的
综上所述,你主要是把堆和栈搞混淆了,malloc申请的空间是从堆中分配,并不是栈
网易云信
2023-12-06 广告
2023-12-06 广告
UIkit是一套轻量级、模块化且易于使用的开源UI组件库,由YOOtheme团队开发。它提供了丰富的界面元素,包括按钮、表单、表格、对话框、滑块、下拉菜单、选项卡等等,适用于各种类型的网站和应用程序。UIkit还支持响应式设计,可以根据不同...
点击进入详情页
本回答由网易云信提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询