问题标签 [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.

0 投票
2 回答
6823 浏览

c# - Dispose of Image in WPF in Listbox(内存泄漏)

我有一个列表框,里面有一堆图像(通过数据模板完成)。图像是通过设置项目来源创建的:

然后使用列表框的 Items.Clear() 方法清除它们。使用列表框的 Items.Add 方法添加新图像。

但是,内存使用量刚刚开始上升和上升。显示的是相同的 300 个左右的小图像,但内存似乎从未被释放。该应用程序开始使用大约 40Megs,并迅速攀升至 700Megs。如何释放所有这些图像正在使用的内存?

编辑:我忘了提一件事,图像(每个大小约为 4-5k)正在通过网络加载。缓存是否对此负责?显示 12 张图像会占用大约 10 兆的内存,大约是 100 倍的文件大小。

0 投票
6 回答
1096 浏览

c++ - 数据成员是否与 C++ 中的对象分配在相同的内存空间中?

假设我有这样的课程:

我像这样实例化它:

x 在栈上还是堆上?s呢?

0 投票
4 回答
2010 浏览

memory - 为什么 Erlang 在大序列上崩溃?

我刚刚开始学习 Erlang,并且正在尝试一些 Project Euler 问题以开始学习。但是,我似乎能够对大序列执行任何操作而不会导致 erlang shell 崩溃。

即,即使这样:

使erlang崩溃,并出现错误:

eheap_alloc:无法分配 467078560 字节的内存(“堆”类型)。

实际上,字节数当然会有所不同。

现在半个 gig 是很多内存,但是一个具有 4 gigs RAM 和大量虚拟内存空间的系统应该能够处理它。

有没有办法让erlang使用更多的内存?

0 投票
11 回答
8184 浏览

objective-c - 在 Cocoa 中使用 autorelease 的成本是多少?

大多数 Apple 文档似乎都避免使用自动释放对象,尤其是在创建 gui 视图时,但我想知道使用自动释放对象的成本是多少?

最终,我是否应该使用自动释放所有内容的策略,并且使用保留/释放应该是特定情况下规则的例外?还是我通常应该使用保留/释放,而自动释放是从 [NSString stringWithEtc...] 等便捷方法返回的对象的例外?

0 投票
5 回答
7564 浏览

c - 如何释放已用于 C 中变量的内存?

如何释放用于 C 中变量(例如长字符串)的内存?

0 投票
1 回答
371 浏览

linux - 如何有效地检查地址的 VM 映射?

我正在编写一个跟踪工具,它需要处理一个 JIT 的输出,所以堆栈有时看起来很奇怪。我想尝试对地址应用一些启发式方法来确定它们是代码、数据还是垃圾。(如果有时我错了,那没什么大不了的;但是,如果进程崩溃,也没那么多。)

我可以cat /proc/«pid»/maps获取 Linux 中某个进程的 VM 映射列表。是否可以在不解析该文件的情况下从进程内部访问此信息(或任何子集)?检查rwx地址的位是理想的。本质上,我想要一个“阅读”版本的mprotect(2).

如果我不能这样做,如何确定对某个地址的访问是否会导致分段错误?(在这种情况下已经SIGSEGV安装了一个处理程序,我不能轻易覆盖它,或者我就这样做。)

0 投票
20 回答
67324 浏览

c++ - 以编程方式确定 C++ 数组的大小?

这个问题的灵感来自一个类似的问题:delete[] 如何“知道”操作数数组的大小?

我的问题有点不同: 有没有办法以编程方式确定 C++ 数组的大小?如果不是,为什么? 我见过的每个接受数组的函数也需要一个整数参数来给它大小。但是正如链接的问题所指出的那样,delete[]必须知道要释放的内存的大小。

考虑这个 C++ 代码:

这将打印“ Size of arr: 4”,这只是指针的大小。有一些打印 256 的函数会很好,但我认为 C++ 中不存在这样的函数。(同样,问题的一部分是为什么它不存在。)

澄清:我知道如果我在堆栈而不是堆上声明数组(即“ int arr[256];”),则sizeof运算符将返回 1024(数组长度 * sizeof(int))。

0 投票
8 回答
87358 浏览

c# - 在结构上使用“new”是否会在堆或堆栈上分配它?

当您使用运算符创建类的实例时new,内存会在堆上分配。当您使用运算符创建结构的实例时,new内存在哪里分配,在堆上还是在堆栈上?

0 投票
9 回答
23471 浏览

c++ - 在 C++ 中返回对象

从类返回对象时,什么时候释放内存合适?

例子,

如果我创建一个 Animal Lister 实例并从中获取 Animal 引用,那么我应该在哪里删除它?

这里的问题是 AnimalLister 没有办法跟踪创建的动物列表,所以我如何更改此类代码的逻辑以删除创建的对象。

0 投票
7 回答
7308 浏览

c++ - 释放分配给 void 指针数组的内存

我正在声明一个 void 指针数组。每个都指向一个任意类型的值。
void **values; // Array of void pointers to each value of arbitary type

初始化值如下:

现在如何释放/删除为值分配的内存(空指针数组)?