为啥我delete后内存没有被释放?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为啥我delete后内存没有被释放?相关的知识,希望对你有一定的参考价值。
struct List HBufC* aPath; List* next; ;我用的是链表,List* p;List* pp=head;for(TInt i=0;inext;while(Info.Count()>iIndex+iPos) p=pp->next; pp->next=p->next; delete p->aPath; delete p; 删除了1000多个,加起来至少得几百K了吧,可程序占用的内存并没有丝毫的减少,程序退出后内存倒是释放了
我的意思是,我程序运行后只占100多K内存,随着我不断的new,堆在不断增大,达到1M多,但后来我又delete了很多,资源是释放了,但堆没变小,虽然我的程序在new时还可以使用之前被释放的空间但是其它程序难道也能用我的堆空间?如果不能得话那将近1M的空间占着却不用太浪费了,既然我new时堆能动态增大那我delete时怎么使它动态减小呢? 参考技术A 我想在调用系统的功能时传递更多参数例如:视频,我传递个参数限制它录制的时间和生成文件的大小,以及文件的位置请问,这个参数怎么传。。非要自己写吗我想在调用系统的功能时传递更多参数例如:视频,我传递个参数限制它录制的时间和生成文件的大小,以及文件的位置请问,这个参数怎么传。。非要自己写吗 参考技术B 等堆被释放了,占用内存大小才会有显著的变化. 参考技术C 不知道windows是怎样的,嘻嘻,我只是个编程爱好者,在symbian里貌似new的内存被delete后进程所占用的堆空间没减少,所以查看系统剩余内存并没有减少,但是自己的程序可以继续用被delete掉的空间,只是个人猜测
为啥在关闭 lottie-ios 动画视图控制器后没有释放内存?
【中文标题】为啥在关闭 lottie-ios 动画视图控制器后没有释放内存?【英文标题】:Why is memory not freed after a lottie-ios animation view controller is dismissed?为什么在关闭 lottie-ios 动画视图控制器后没有释放内存? 【发布时间】:2020-12-03 08:54:44 【问题描述】:我有一个带有AnimationView
(lottie-ios
pod 的类)的视图控制器。动画占用太多内存(大约 800 MB)。但问题是,视图控制器关闭后,内存还是满的。
动画视图创建如下:
var mainAnimation = AnimationView(name: "my_animation_name")
【问题讨论】:
【参考方案1】:问题原因是我使用了旧版本的lottie-ios pod – 3.1.8。在旧版本中,BundleImageProvider 具有静态缓存属性
static var cache = [String: UIImage]()
所以即使BundleImageProvider
的所有实例都被取消初始化,这个属性仍然在内存中,因为它是静态的。没有 clearCache 方法。而且该物业不公开。所以我不能直接访问它。在3.1.9版本中,他们去掉了这个属性,问题就解决了。
但如果您仍然需要使用旧版本,还有另一种解决方案
AnimationView 的 init 有 imageProvider: AnimationImageProvider
参数。 AnimationImageProvider
是一个协议。如果传递的属性为 nil,则默认使用 BundleImageProvider
。您可以创建自己的AnimationImageProvider
实现并使用它。您可以复制BundleImageProvider
的实现,然后执行以下两个操作之一:
-
使
cache
属性为非静态的
将cache
属性保留为静态,但添加clearCache
方法。
我更喜欢第一个,因为您不需要手动处理缓存清除。
【讨论】:
以上是关于为啥我delete后内存没有被释放?的主要内容,如果未能解决你的问题,请参考以下文章