OpenEdv-开源电子网

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

内存管理的几个问题,先定义一个大数组,在用malloc给其他变量分配内存,会有地址重叠的情况吗?

[复制链接]

4

主题

33

帖子

0

精华

高级会员

Rank: 4

积分
552
金钱
552
注册时间
2016-4-10
在线时间
100 小时
发表于 2016-6-22 20:00:41 | 显示全部楼层 |阅读模式
2金钱
关于内存管理的问题,例如:已经先定义一个大数组 : u32 a[1024],然后再用内存管理给指针P分配2K内存 :p=mymalloc(sramx,2048);

请问:
1、数组a在RAM上的地址空间会出现与p的重叠吗?
2、p可以用myfree(sramx,p)释放内存,数组a[1024]能释放内存吗?
3、既然数组a是占用ram空间的,my_mem_perused(SRAMIN)是没有计算到数组a的占用的空间的?这样合理吗?

请大神指教!!!

最佳答案

查看完整内容[请看2#楼]

1,不会。2,不行。3,为什么不合理?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2016-6-22 20:00:42 | 显示全部楼层
1,不会。2,不行。3,为什么不合理?
回复

使用道具 举报

4

主题

33

帖子

0

精华

高级会员

Rank: 4

积分
552
金钱
552
注册时间
2016-4-10
在线时间
100 小时
 楼主| 发表于 2016-6-23 11:55:25 | 显示全部楼层
数组a定义时,不是没有在内存管理表做标记吗;那用my_mem_perused(SRAMIN)计算的值就不包括数组a占用的内存啦。
回复

使用道具 举报

4

主题

33

帖子

0

精华

高级会员

Rank: 4

积分
552
金钱
552
注册时间
2016-4-10
在线时间
100 小时
 楼主| 发表于 2016-6-23 11:55:39 | 显示全部楼层
正点原子 发表于 2016-6-22 20:00
1,不会。2,不行。3,为什么不合理?


数组a定义时,不是没有在内存管理表做标记吗;那用my_mem_perused(SRAMIN)计算的值就不包括数组a占用的内存啦。
回复

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2384
金钱
2384
注册时间
2012-11-22
在线时间
403 小时
发表于 2016-6-23 13:44:56 | 显示全部楼层
数组在栈里面,自上往下增长;内存管理在堆里面,自下往上增长。
态度决定一切
回复

使用道具 举报

4

主题

33

帖子

0

精华

高级会员

Rank: 4

积分
552
金钱
552
注册时间
2016-4-10
在线时间
100 小时
 楼主| 发表于 2016-6-23 16:43:08 | 显示全部楼层
冰封嗜魔 发表于 2016-6-23 13:44
数组在栈里面,自上往下增长;内存管理在堆里面,自下往上增长。

就是说当这两个占用的内存达到一度程度时,是会出现重叠交叉的情况咯?
回复

使用道具 举报

54

主题

1008

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2384
金钱
2384
注册时间
2012-11-22
在线时间
403 小时
发表于 2016-6-24 08:34:18 | 显示全部楼层
rawgan 发表于 2016-6-23 16:43
就是说当这两个占用的内存达到一度程度时,是会出现重叠交叉的情况咯?

很难,栈在启动文件里面已经定义大小了,一般不会超过1-2K。
态度决定一切
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2016-6-24 10:16:25 | 显示全部楼层
rawgan 发表于 2016-6-23 11:55
数组a定义时,不是没有在内存管理表做标记吗;那用my_mem_perused(SRAMIN)计算的值就不包括数组a占用的内存 ...

当然不包括。
内存管理又没说要全部内存都用作管理。它只是管理大部分内存而已。全局变量什么的,和内存管理无关。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

4

主题

33

帖子

0

精华

高级会员

Rank: 4

积分
552
金钱
552
注册时间
2016-4-10
在线时间
100 小时
 楼主| 发表于 2016-6-24 11:46:53 | 显示全部楼层
正点原子 发表于 2016-6-24 10:16
当然不包括。
内存管理又没说要全部内存都用作管理。它只是管理大部分内存而已。全局变量什么的,和内存 ...

哦。。明白
回复

使用道具 举报

4

主题

33

帖子

0

精华

高级会员

Rank: 4

积分
552
金钱
552
注册时间
2016-4-10
在线时间
100 小时
 楼主| 发表于 2016-6-24 11:47:53 | 显示全部楼层
冰封嗜魔 发表于 2016-6-24 08:34
很难,栈在启动文件里面已经定义大小了,一般不会超过1-2K。

好的。谢谢!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 14:28

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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