问题标签 [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.
java - 使用调用 API 的 JNI 内存管理
当我使用 JNI 方法构建 java 对象时,为了将它作为参数传递给我使用 JNI 调用 API 调用的 java 方法,我如何管理它的内存?
这是我正在使用的内容:
我有一个 C 对象,它的析构函数方法比free()
. 这个 C 对象将与一个 Java 对象相关联,一旦应用程序完成了 Java 对象,我就不再需要 C 对象了。
我正在像这样创建 Java 对象(为清楚起见,省略了错误检查):
那么,既然我已经完成了instance
,我该怎么办呢?理想情况下,我想把垃圾收集留给虚拟机;当它完成时,instance
如果它还调用c_object_destroy()
我提供给它的指针,那就太棒了。这可能吗?
一个单独但相关的问题与我在这样的方法中创建的 Java 实体的范围有关;我是否必须手动释放,比如说,,,class
或constructor
以上method
?JNI 文档在正确内存管理的主题上令人沮丧地模糊(根据我的判断)。
c++ - C++浅拷贝问题
假设我有一个带有 int 指针成员变量“i”的结构“s”。我在 s 的默认构造函数中为 i 在堆上分配内存。稍后在代码的其他部分中,我将 s 的实例按值传递给某个函数。我在这里做浅拷贝吗?假设我没有为 s 实现任何复制构造函数或赋值运算符或任何东西......只是默认构造函数。
c - 在调用它之前确定 realloc() 行为
据我了解,当被要求保留更大的内存块时, realloc() 函数将执行以下三种不同的操作之一:
增长当前块是一个非常便宜的操作,所以这是我想利用的行为。但是,如果我重新分配内存是因为我想(例如)在现有字符串的开头插入一个字符,我不希望 realloc() 复制内存。我最终将使用 realloc() 复制整个字符串,然后再次手动复制它以释放第一个数组元素。
是否可以确定 realloc() 会做什么?如果是这样,是否有可能以跨平台的方式实现?
c++ - “安置新”有什么用?
这里有人用过 C++ 的“placement new”吗?如果有,是为了什么?在我看来,它只对内存映射硬件有用。
c - 如何仅使用标准库分配对齐的内存?
我刚刚完成了作为工作面试一部分的测试,一个问题难倒了我,甚至使用谷歌作为参考。我想看看 StackOverflow 的工作人员可以用它做什么:
该
memset_16aligned
函数需要一个 16 字节对齐的指针传递给它,否则它将崩溃。a) 你将如何分配 1024 字节的内存,并将其与 16 字节的边界对齐?
b) 执行后释放内存memset_16aligned
。
c - 高效的堆管理器,用于处理大量流失、微小的分配?
我正在寻找堆管理器的想法来处理非常具体的情况:很多非常小的分配,每个分配范围从 12 到 64 字节。任何更大的东西,我都会传递给常规的堆管理器,所以只需要处理小块。只需要 4 字节对齐。
我主要担心的是
- 高架。常规的 libc 堆通常会将分配四舍五入为 16 字节的倍数,然后添加另一个 16 字节标头 - 这意味着 20 字节分配的开销超过 50%,这很糟糕。
- 表现
一个有用的方面是 Lua(它是这个堆的用户)会在调用 free() 时告诉你它正在释放的块的大小——这可能会启用某些优化。
我会发布我目前的方法,它工作正常,但如果可能的话,我想改进它。有任何想法吗?
c - 如何从 C 中的指针获取数组的大小?
我分配了一个mystruct
大小n
如下的“数组”:
后来,我只能访问p
,而不再拥有n
。有没有办法确定仅给定指针的数组的长度p
?
我认为这一定是可能的,因为free(p)
它就是这样做的。我知道malloc()
跟踪它分配了多少内存,这就是它知道长度的原因;也许有办法查询这些信息?就像是...
我知道我应该重新编写代码以便我知道n
,但如果可能的话我宁愿不这样做。有任何想法吗?
windows - UNIX 与 Windows 内存释放
我的理解是,在 unix 中,当内存被释放时,内存不会返回给操作系统,它会留在进程中以再次用于下一次调用 malloc。
在 Windows 上,我知道内存实际上是返回给操作系统的。
这两种做事方式之间有什么大区别,还是只是做同一件事的两种不同方式?如果这两种方法有任何优点/缺点,它们是什么?
编辑: 感谢您的澄清。我一直认为这是操作系统的问题(因为在类 UNIX 系统中进程的大小似乎从未减小,但在 Windows 中却如此)。
ruby-on-rails - 如何解释内存使用数据?
有人可以用实际的方式解释这一点吗?示例表示一个使用 Nginx 和 3 个 Mongrel 集群的低流量 Rails 站点的使用情况。我问是因为我的目标是了解页面缓存,想知道这些数字是否对该过程有重要意义。谢谢你。很棒的网站!
c++ - 释放堆上的内存。我应该怎么做?
我正在为 Windows Mobile 应用程序编写 CESetup.dll。它必须是无人管理的,我对此几乎没有经验。所以我不确定我是否应该释放我分配的内存以及我如何去做。
这是我写的函数:
据我了解,folderPath 是在堆上分配的。EmptyDirectory() 是我自己的函数,用于删除目录中的所有内容。RemoveDirectory() 和 DeleteFile() 是系统调用。
我的问题是我应该folderPath
在函数退出之前解除分配吗?如果我应该,我该怎么做?