OpenEdv-开源电子网

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

有关内存释放与使用的问题

[复制链接]

6

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-8-13
在线时间
27 小时
发表于 2017-10-20 16:07:00 | 显示全部楼层 |阅读模式
1金钱
在STM32中,一般来说,内存是CPU自动分配的,不需要我们自己去设置内存单元。但是,CPU如何判断该内存单元是否可用?换句话说,在我自己定义的内存单元里,释放的时候除了赋值为0,还有什么其他操作提示CPU这段内存可以使用?
然而,我相信不只是将该单元的值赋值为0的,因为有时候我们需要的值就是0,这就是我们有用的值。
原子哥,懂得话,还请解答一下内存的问题。

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

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-10-20 16:40:04 | 显示全部楼层
内存不是CPU分配的,是编译器分配的,在你编译程序的时候编译器就给你把你代码中的各个内存分配好了,数组占哪里?变量占哪里?等等
回复

使用道具 举报

62

主题

903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3566
金钱
3566
注册时间
2016-1-8
在线时间
544 小时
发表于 2017-10-20 17:16:53 | 显示全部楼层
把内存当做一把刀,用的时候拿过来,不用的时候放回原处,以便其他人使用
回复

使用道具 举报

6

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-8-13
在线时间
27 小时
 楼主| 发表于 2017-10-20 23:45:05 | 显示全部楼层
Sun_Fly 发表于 2017-10-20 17:16
把内存当做一把刀,用的时候拿过来,不用的时候放回原处,以便其他人使用

但是,使用的时候怎么改变它的状态?难道只是看是否有值?
回复

使用道具 举报

6

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-8-13
在线时间
27 小时
 楼主| 发表于 2017-10-20 23:48:28 | 显示全部楼层
zuozhongkai 发表于 2017-10-20 16:40
内存不是CPU分配的,是编译器分配的,在你编译程序的时候编译器就给你把你代码中的各个内存分配好了,数组 ...

那么这么说吧,假如我定义了一个1个Byte的全局变量,也就是我开辟了1Byte的内存空间,对吧。那么如果,我想让这段内存空间释放掉,即这段空间可以被使用。通俗理解,可以认为是取消这个全局变量的定义吧?那这个需要怎么做到?
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-10-21 08:29:58 | 显示全部楼层
本帖最后由 zuozhongkai 于 2017-10-21 08:31 编辑
liu_z-w 发表于 2017-10-20 23:48
那么这么说吧,假如我定义了一个1个Byte的全局变量,也就是我开辟了1Byte的内存空间,对吧。那么如果,我 ...

没法释放!你的这个变量就会一直对应着这个内存空间,除非你用malloc()函数给这个变量申请的内存,那么你就可以用free()来释放。编译器定好的这些内存分配你是没法释放的
开往春天的手扶拖拉机
回复

使用道具 举报

17

主题

587

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4467
金钱
4467
注册时间
2013-6-27
在线时间
565 小时
发表于 2017-10-21 08:47:40 | 显示全部楼层
可以了解下动态内存申请及回收。
让我们的思维驾驭在电的速度之上!
回复

使用道具 举报

6

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-8-13
在线时间
27 小时
 楼主| 发表于 2017-10-21 09:02:21 | 显示全部楼层
zuozhongkai 发表于 2017-10-21 08:29
没法释放!你的这个变量就会一直对应着这个内存空间,除非你用malloc()函数给这个变量申请的内存,那么你 ...

我其实就是想说malloc跟free这两个函数。这两个函数是自己定义的吧,即对于编译器或者CPU没有真正的针对内存分配与释放的代码。那么这两个自己定义的函数,怎么能做到对内存的释放与分配操作?我看了最底层的,好像只是对数组赋值为0.
回复

使用道具 举报

6

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-8-13
在线时间
27 小时
 楼主| 发表于 2017-10-21 09:03:17 | 显示全部楼层
DongInker 发表于 2017-10-21 08:47
可以了解下动态内存申请及回收。

就是想知道,在没有针对内存的固定函数,如何认为做到内存的申请与回收的。
回复

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13117
金钱
13117
注册时间
2012-11-26
在线时间
3813 小时
发表于 2017-10-21 09:06:12 | 显示全部楼层
liu_z-w 发表于 2017-10-21 09:02
我其实就是想说malloc跟free这两个函数。这两个函数是自己定义的吧,即对于编译器或者CPU没有真正的针对 ...

malloc 和 free
给你讲简单一点,就是先向内存要了一大块地方。

然后由人自行去标记是不是被占用了

比如你想要一块地方,就去这一大块地方找找标记,是不是足够,如果足够,就把这地方占了,然后标记这个地方已经被占,否则malloc失败

当你不用了,就把这个地方标记为空闲,就是free
学无止境
回复

使用道具 举报

6

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-8-13
在线时间
27 小时
 楼主| 发表于 2017-10-21 10:30:47 | 显示全部楼层
jermy_z 发表于 2017-10-21 09:06
malloc 和 free
给你讲简单一点,就是先向内存要了一大块地方。

好吧。那这个标记怎么标?对内存怎么标记?
回复

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13117
金钱
13117
注册时间
2012-11-26
在线时间
3813 小时
发表于 2017-10-21 10:49:24 | 显示全部楼层
liu_z-w 发表于 2017-10-21 10:30
好吧。那这个标记怎么标?对内存怎么标记?

你要是花点时间仔细看看malloc原理  

就不会这样只会问了  呵呵
学无止境
回复

使用道具 举报

6

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-8-13
在线时间
27 小时
 楼主| 发表于 2017-10-21 11:34:28 | 显示全部楼层
jermy_z 发表于 2017-10-21 10:49
你要是花点时间仔细看看malloc原理  

就不会这样只会问了  呵呵

虽然,你说的可能是对的。但是,其实我想表达的意思,你可能没明白,或者我没明白你想表达的意思。不过,还是谢谢了。
回复

使用道具 举报

6

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2016-8-13
在线时间
27 小时
 楼主| 发表于 2017-10-22 00:14:30 | 显示全部楼层
我好像理解了。内存分配,应该只是说可以手动分配一段内存,而且这段内存在定义了长度之后,就一直存在。其实,所谓的释放,只是相当于告诉别人,这段内存可以被作其他操作时候使用,但是前提是遵循分配内存的方法上进行。所以,事实上只要我定义了长度,这段内存就是一直在被占用的,就算释放了也是在占用的。而在使用int a这种方式定义时候,永远也不会用到之前被定义的那段可被管理的内存空间。这也就解释了,为什么在开辟了之后,就算释放了,编译的data是不会减小的原因了。
回复

使用道具 举报

62

主题

903

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3566
金钱
3566
注册时间
2016-1-8
在线时间
544 小时
发表于 2017-10-23 09:37:14 | 显示全部楼层
liu_z-w 发表于 2017-10-20 23:48
那么这么说吧,假如我定义了一个1个Byte的全局变量,也就是我开辟了1Byte的内存空间,对吧。那么如果,我 ...

理论上只有堆区的空间可以释放,并且释放了一段时间内是不可用的。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 18:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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