Questions tagged «memory-management»

动态分配和释放部分物理内存的过程,以响应程序请求(如果可能),请求者之间保持公平且无饥饿。

2
建议为类型化的内存视图分配内存的方法是什么?
有关类型化内存视图的Cython文档列出了分配给类型化内存视图的三种方式: 从原始的C指针, 从一个 np.ndarray和 从cython.view.array。 假设我没有从外部将数据传递到cython函数中,而是想分配内存并将其返回为np.ndarray,那么我选择了哪些选项?还假设该缓冲区的大小不是编译时常量,即我无法在堆栈上分配,但需要malloc为选项1。 因此,这三个选项看起来像这样: from libc.stdlib cimport malloc, free cimport numpy as np from cython cimport view np.import_array() def memview_malloc(int N): cdef int * m = <int *>malloc(N * sizeof(int)) cdef int[::1] b = <int[:N]>m free(<void *>m) def memview_ndarray(int N): cdef int[::1] b = np.empty(N, dtype=np.int32) def …


9
如何获取可用内存C ++ / g ++?
我想根据可用内存分配缓冲区。这样,当我进行处理时,内存使用率上升了,但仍然处于可用内存限制之内。有没有一种方法可以获取可用内存(我不知道虚拟或物理内存状态会有所不同吗?)。方法必须与平台无关,因为它必须在Windows,OS X,Linux和AIX上使用。(如果可能的话,我还想为我的应用程序分配一些可用的内存,在执行过程中不会改变的内存)。 编辑:我做到了可配置的内存分配。我知道这不是一个好主意,因为大多数操作系统都为我们管理内存,但是我的应用程序是ETL框架(打算在服务器上使用,但也作为Adobe indesign的插件在桌面上使用)。因此,我遇到了问题,因为Windows会不使用交换而返回错误的alloc,而其他应用程序则会开始失败。正如我被教导要避免崩溃那样,所以,我只是试图优雅地降级。

3
确定iOS设备上的可用RAM量
您可能已经看到了许多“系统信息”应用程序,这些应用程序显示诸如剩余电池寿命,甚至是诸如内存等系统信息。 以类似的方式,是否有任何方法可以从我的应用程序中检索当前的可用RAM量,以便我可以更好地决定何时最好转储或保留某些视图以避免内存警告?

12
由于.NET具有垃圾回收器,为什么我们需要终结器/析构函数/处置模式?
如果我理解正确,.net运行时将始终在我之后清理。因此,如果我创建新对象并且停止在代码中引用它们,则运行时将清理这些对象并释放它们占用的内存。 既然是这种情况,那么为什么某些对象需要具有析构函数或dispose方法?当不再引用它们时,运行时是否会清理它们?


1
KB4525236更改了GetRef的内存消耗(垃圾回收)
在Windows 2016 Server / Windows 10客户端上安装KB4525236后,我们会遇到内存不足的问题。通过调用函数时,内存被垃圾回收时,此安全修复程序似乎已发生更改GetRef。 PréKB4525236 GetRef在实例变量设置为时,在通过调用的函数中创建的每个实例都会被垃圾回收。nothing 帖子KB4525236 在通过调用的函数中创建的每个实例都GetRef保留在内存中,并且仅在整个函数完成时才进行垃圾回收。在循环中创建实例时,这可能会迅速累加并导致内存不足,尤其是在32位进程中。 问题 我们在网上找不到任何相关内容,因此我们希望获得其他遇到相同问题的人的确认。 编辑从零开始:这是相同的问题,但尚未解决 (自KB4524570(2019年11月12日)Windows 10 1903起vbscript.dll class_terminate bug 如果有人可以验证并知道可行的解决方案,那就太好了。 POC 在安装了KB4525236的设备上运行的以下脚本显示了以下情况下垃圾收集的区别: 直接调用:仅在第一个实例销毁后才创建第二个实例(这是我们期望的行为) 通过调用GetRef:第二个实例在第一个实例被销毁之前创建,因此有两个实例使用内存。 另存为:KB4525236.vbs 运行为:wscript KB4525236.vbs Dim Name, Log Class IDummyInstance Dim FName Sub Class_Initialize FName = Name Log = Log & "Initialize " & FName & VbNewLine End Sub …

1
Java“ Foo f = new Foo()”中的对象初始化与使用malloc作为C语言中的指针是否基本相同?
我试图了解Java中对象创建背后的实际过程-并且我想使用其他编程语言。 假定Java中的对象初始化与对C中的结构使用malloc相同是错误的吗? 例: Foo f = new Foo(10); typedef struct foo Foo; Foo *f = malloc(sizeof(Foo)); 这就是为什么说对象位于堆而不是堆栈上的原因吗?因为它们本质上只是数据指针?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.