问题标签 [memory-management]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
objective-c - Objective C 中的对象分配和初始化
以下两种分配和初始化对象的方法有什么区别?
和
大多数苹果示例使用第一种方法。为什么要分配、初始化和对象然后立即释放?
c++ - 使用 .reset() 释放具有唯一所有权的 boost::shared_ptr
我将一个对象 ( TTF_Font
) 存储在shared_ptr
从第三方 API 提供给我的 a 中。我不能在对象上使用 new 或 delete,因此shared_ptr
还提供了一个“释放”函子。
如果稍后我需要显式释放此对象,这样做是否正确:
然后让screenFont
(实际shared_ptr
对象)自然销毁?
regex - 为什么我的 Perl 正则表达式使用这么多内存?
我正在对一个大标量运行正则表达式。虽然这场比赛没有捕捉到任何东西,但我的进程在这场比赛之后增长了 30M:
$c
是对一个相当大的标量(大约 21M)的引用,但我已经验证它pos(${$c})
在正确的位置,并且表达式在第一个字符处匹配,并在匹配pos(${$c})
后更新到正确的位置。但正如我所提到的,这个过程在#A 和#B 之间增长了大约 30M,即使我没有用这场比赛捕捉到任何东西。我的记忆去哪儿了?
编辑:是的,使用$&
是罪魁祸首。我们使用的是 Perl 5.8.8,而我的脚本使用的是Getopt::Declare,它使用内置的Text::Balanced。该模块的 1.95 版本使用$&
. Perl 5.10 附带的 2.0.0 版本删除了对的引用$&
并缓解了该问题。
python - 清除列表
我发现我无法清除列表很烦人。在这个例子中:
我第二次将 a 初始化为一个空白列表,它创建了一个列表的新实例,它在内存中的不同位置,所以我不能用它来引用第一个,更不用说它效率低下。
我可以看到保留相同指针的唯一方法是执行以下操作:
不过,这似乎很冗长,有没有更好的方法来解决这个问题?
visual-studio - Visual Studio 2005 内存使用情况
我发现 Visual Studio 内存使用量通常平均约为 150-300 MB RAM。
作为一个经常需要打开多个 Visual Studio 实例运行的开发人员,是否有任何性能技巧来优化 VS 使用的内存量?
我正在使用一个加载项 (TFS) 运行 VS 2005
c++ - 函数内的字符串文字:自动变量还是在堆中分配?
我们在函数内部使用的字符串文字是自动变量吗?或者它们是否分配在我们必须手动释放的堆中?
我的情况类似于下面显示的代码,其中我将字符串文字分配给类的私有字段(在代码中标记为 ONE)并稍后在我的程序中检索它并使用它(标记为 TWO)。我是否将堆栈中的变量分配给 ONE 中的字段?代码是否可以引用一个悬空指针,在这种情况下它可以工作,因为程序足够小?
我已经编译并运行了它,它运行良好,但是在我的实际程序中出现了奇怪的崩溃,我将字符串文字分配给这样的类的字段,我怀疑我上面提到的情况。
我应该将变量“s”声明为 char 数组而不是指针吗?我打算使用std :: string,但我只是对此感到好奇。
一如既往,非常感谢任何指针或帮助:) 谢谢。
java - Java 中的循环引用
给定一个以复杂、循环的方式相互引用的类实例的聚合:垃圾收集器是否可能无法释放这些对象?
我隐约记得这是过去 JVM 中的一个问题,但我认为这在几年前就已经解决了。然而,对 jhat 的一些调查显示,循环引用是我现在面临的内存泄漏的原因。
注意:我一直认为 JVM 能够解析循环引用并从内存中释放这些“垃圾岛”。但是,我提出这个问题只是为了看看是否有人发现了任何例外。
ruby - Ruby 内存管理
我使用 Ruby 已经有一段时间了,我发现,对于更大的项目,它会占用相当多的内存。在 Ruby 中减少内存使用的最佳实践是什么?
- 请让每个答案都有一个“最佳实践”,并让社区投票。
c++ - 在什么情况下我使用 malloc 和/或 new?
我在 C++ 中看到有多种分配和释放数据的方法,我知道当你调用时malloc
你应该调用free
,当你使用new
操作符时你应该配对,delete
将两者混合是错误的(例如调用free()
创建的东西与new
操作员),但我不清楚何时应该在我的现实世界的程序中使用malloc
/free
以及何时应该使用new
/ 。delete
如果您是 C++ 专家,请告诉我您在这方面遵循的任何经验法则或约定。
c# - 托管环境中使用的最大堆?(.net/java)
您个人在 Java 或 .NET 等托管环境中使用的最大堆是多少?你遇到了哪些性能问题,你最终得到的收益是否会随着堆的增大而递减?