OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6594|回复: 12

觉得在子程序中使用内存管理来申请内部SRAM内存池是没有必要的

[复制链接]

8

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2013-9-5
在线时间
31 小时
发表于 2015-1-15 22:20:11 | 显示全部楼层 |阅读模式

比如象以下样子的子程序

void sim900a_tcpudp_test(u8 mode,u8* ipaddr,u8* port)

。。。
 p=mymalloc(SRAMIN,100);  //申请100字节内存
 p1=mymalloc(SRAMIN,100); //申请100字节内存
 。。。。

。。。。
 myfree(SRAMIN,p);
 myfree(SRAMIN,p1);
}

因为程序跳出了这个子程序,所占用的内存不是就自动释放了吗?

不知道我的想法对不对。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-1-15 22:47:28 | 显示全部楼层
说明你没理解内存管理的真谛.
多写写代码吧,尤其是工程量大,几乎将内存耗光的那种,就会想到内存管理的好了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2015-1-16 01:19:28 | 显示全部楼层
只能呵呵了
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2015-1-16 01:30:22 | 显示全部楼层
堆和栈的区别楼主得搞清楚啊,看看数据结构和算法的书吧。单片机的内存不比智能机和电脑,栈空间很小,大的空间都得从堆中申请,不然很容易stack overflow 的。
业余程序玩家。
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-1-16 08:16:27 | 显示全部楼层
只能呵呵了,没别的说
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1830
金钱
1830
注册时间
2014-6-27
在线时间
980 小时
发表于 2015-1-16 10:11:31 | 显示全部楼层
多做点东西吧,多写点代码,慢慢就会理解动态内存的好处了的。
回复 支持 反对

使用道具 举报

8

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2013-9-5
在线时间
31 小时
 楼主| 发表于 2015-1-16 16:36:25 | 显示全部楼层
回复【4楼】ofourme:
---------------------------------
难道子程序中使用的内存是栈里面的?
回复 支持 反对

使用道具 举报

34

主题

805

帖子

4

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1865
金钱
1865
注册时间
2011-3-29
在线时间
140 小时
发表于 2015-1-16 16:48:04 | 显示全部楼层
回复【7楼】kuanglf:
---------------------------------
程序里定义的变量,除了声明为static的,其他的都是从栈里面分配的。当然这是一般情况下,kei?l C51这个奇葩例外,呵呵。
业余程序玩家。
回复 支持 反对

使用道具 举报

8

主题

76

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
264
金钱
264
注册时间
2013-9-5
在线时间
31 小时
 楼主| 发表于 2015-1-17 16:04:46 | 显示全部楼层
回复【8楼】ofourme:
---------------------------------
现在我不是正在使用Keil uVision4吗,“例外”是不是说它是从堆中分配内存的呢?
回复 支持 反对

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-8-27 10:11:25 | 显示全部楼层
回复【9楼】kuanglf:
---------------------------------
STM32栈空间一般是2K字节(编译器分的),所以如果你在子函数里面用几个大数组,栈空间就可能被用完,导致越界,原子写的这个是从全局变量区申请内存来用,就不是用栈区的空间了,如果你在函数内部用大数组,就可以从全局区申请,用完释放,保证栈区不越界啊
合肥-文盲
回复 支持 反对

使用道具 举报

36

主题

195

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
313
金钱
313
注册时间
2014-10-27
在线时间
34 小时
发表于 2016-1-18 11:40:56 | 显示全部楼层
受教,mark!
回复 支持 反对

使用道具 举报

2

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
95
金钱
95
注册时间
2014-6-23
在线时间
17 小时
发表于 2016-1-18 23:06:54 | 显示全部楼层
mark!
回复 支持 反对

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
143
金钱
143
注册时间
2016-1-8
在线时间
34 小时
发表于 2016-8-15 17:15:56 | 显示全部楼层

mark!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-7 16:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表