VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 804|回复: 7

关于动态申请内存的问题

[复制链接]

3

主题

4

帖子

5.00

积分

新手上路

Rank: 1

积分
5.00
发表于 2020-1-29 12:20:01 | 显示全部楼层 |阅读模式
在C++中动态申请的内存空间要显式的释放,那么如果程序结束时没有释放这些资源那么这些内存是不是就不会释放了?我看书上写的是不会被释放,直到你重新启动计算机才行,可我做了个程序试了一下,感觉程序运行结束时申请的内存又回来了,我是通过任务管理器观察系统可用内存来推测的,有人知道准确的答案吗
回复

使用道具 举报

0

主题

37

帖子

28.00

积分

新手上路

Rank: 1

积分
28.00
发表于 2020-3-2 11:00:01 | 显示全部楼层
根据我想当然,应该是程序结束就释放了,一个程序的结束意味着它占用的资源的释放。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-3-2 11:30:01 | 显示全部楼层
啥程序测试的?
垃圾内存能用吗?
回复

使用道具 举报

0

主题

3

帖子

53.00

积分

注册会员

Rank: 2

积分
53.00
发表于 2020-3-2 11:38:47 | 显示全部楼层
C++中动态申请的内存空间要显式的释放,如果没有显示释放的话,程序在退出时,由操作系统回收申请的内存。但是系统内核资源(如某些带有计数器的资源句柄)不会回收。
回复

使用道具 举报

0

主题

55

帖子

44.00

积分

新手上路

Rank: 1

积分
44.00
发表于 2020-3-2 21:45:02 | 显示全部楼层
楼主,你看的书太老了吧,还是dos时代的书吧。
在虚拟内存模式下,当进程退出时,所以系统资源都会被自动回收。
回复

使用道具 举报

0

主题

15

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-3-3 09:15:01 | 显示全部楼层
动态申请的是堆内存,如果没有内存自动回收机制的话(Java有,C++没有)
所申请的内存在进程结束时是不会被自动回收的,也就是内存泄漏

C++中自动释放的是栈内存
回复

使用道具 举报

0

主题

73

帖子

46.00

积分

新手上路

Rank: 1

积分
46.00
发表于 2020-3-4 10:15:01 | 显示全部楼层
>>“如果程序结束时没有释放这些资源那么这些内存是不是就不会释放了?我看书上写的是不会被释放,直到你重新启动计算机才行”

这是书上乱说,不同的平台,不同的系统,对于这个问题的处理是不一样的,但对于大多数的现代操作系统来说,都不太会不释放的。

不过,对于“内存泄露”,更重要的地方在于你程序在运行的时候怎么办?真正有用的程序,不像我们平时写的练习程序那样,执行几步简单操作就结束,而是一开动辄就是几个小时,几天,执行成万上亿次循环,甚至像银行的系统那样,成天累月地运行不关闭,这时,如果每次循环平均泄露一个字节,后果也是不堪设想的。
回复

使用道具 举报

0

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-3-11 05:30:02 | 显示全部楼层
不释放是指进程没有结束的情况,一但程序退出,即使是在程序中NEW的内存,也会被回收的。呵呵。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

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