在 Mac OS X 上的 64 位进程中,中等大小的内存分配怎么会失败?

2023-11-26

我正在构建一个相册布局应用程序。该应用程序经常将 JPEG 图像解压缩到内存中的位图缓冲区中。图像的大小限制为 100 兆像素(但通常不超过 15 兆像素)。

有时这些缓冲区的内存分配会失败:[[NSMutableData alloc] initWithLength:]回报nil。这似乎发生在系统的可用物理内存接近零的情况下。

我的理解Mac OS X 中的虚拟内存系统这是 64 位进程中的分配吗几乎(原文如此)不能失败。有 16 艾字节的地址空间,我尝试一次最多分配 400 兆字节。理论上,我可以分配 400 亿个这样的缓冲区,而不会达到可用地址空间的硬限制。当然,实际限制会阻止这种情况,因为交换空间受到启动卷大小的限制。事实上,我只进行了很少的分配(少于十次)。

我不明白的是,无论当时的物理内存有多低,分配都会失败。我认为,只要还有剩余的交换空间,内存分配就不会失败(因为此时页面甚至还没有映射)。

该应用程序被垃圾收集。

Edit:

我有时间进一步深入研究这个问题,以下是我的发现:

  1. 该问题仅发生在垃圾收集过程中。
  2. 当分配来自NSMutableData失败,一个简单的malloc仍然成功分配相同数量的内存。
  3. 当总体物理内存接近零(即将发生交换)时,总是会发生该错误。

我假设NSData uses NSAllocateCollectable执行分配而不是malloc在垃圾收集下运行时。

我的结论是,当物理内存较低时,收集器无法分配大块内存。再说一遍,我不明白。


答案在于实施libauto.

从 OS X 10.6 开始,在 64 位平台上为垃圾收集内存分配了 8 GB 的空间。对于大型分配 (>=128k) 和小型 (

因此,在 10.6 中,您有 4Gb 内存可用于大量分配垃圾收集内存。 10.5 时,竞技场的大小为32Gb,但 Apple 将该大小降低至 8Gb10.6.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Mac OS X 上的 64 位进程中,中等大小的内存分配怎么会失败? 的相关文章

  • VLCJ 无法在 Mac 上运行 - 插件 libvlccore.5.dylib

    我正在尝试让 VLCJ 在 Mac 和 PC 上运行 它在 Windows 7 64 位 下运行良好 但当我尝试在 Mac 上运行它时 它崩溃了 我指向 VLC dylib 文件的正确目录 但收到 使用 libvlccore 5 dylib
  • MySQL 数据库无法在 XAMPP for Mac 上启动

    突然我在 mac 上遇到了这个问题 我无法启动我的 MySQL 数据库 我只能启动 ProFTPD 和 Apache Web Server 这是应用程序日志 Starting all servers Starting MySQL Datab
  • 所有平台上的java

    如果您想用 java 为 Windows Mac 和 Linux 编写桌面应用程序 那么所有这些代码都相同吗 您只需更改 GUI 即可使 Windows 应用程序更像 Windows 等等 如果不深入细节 它是如何工作的 Java 的卖点之
  • 在 Mac 上使用 Eclipse 进行 C++ 调试器

    当我最终设置我的 mac 来使用 eclipse 后 我无法调试 我尝试通过谷歌寻求帮助 但没有一个答案对我有用 所以 我需要有人帮助我在 eclipse 上安装和使用 c c 调试器 我安装了 Xcode 5 0 感谢您的帮助 Roy 您
  • Linux 可执行文件与 OS X“兼容”吗?

    如果您在基于 Linux 的平台上用 C 语言编译一个程序 然后将其移植以使用 MacOS 库 它会工作吗 来自编译器的核心机器代码在 Mac 和 Linux 上兼容吗 我问这个问题的原因是因为两者都是 基于 UNIX 的 所以我认为这是真
  • C++ 是否可以在 MacOS 上与 OpenMP 和 boost 兼容?

    我现在已经尝试了很多事情并得出了一些结论 也许 我监督了一些事情 但似乎我无法完成我想要的事情 问题是 是否有可能使用 OpenMP 和 boost 在 MacOS High Sierra 上编译 C 一些发现 如果我错了请纠正我 Open
  • “make install”将库安装在 /usr/lib 而不是 /usr/lib64

    我正在尝试在 64 位 CentOS 7 2 上构建并安装一个库 为了这个目的我正在跑步 cmake DCMAKE BUILD TYPE Release DCMAKE INSTALL PREFIX usr DCMAKE C COMPILER
  • 错误:执行 gem 时... (Gem::FilePermissionError)

    我检查了所有其他类似的答案 没有一个与我的完全一样 这些解决方案也不适合我 gem environment and sudo gem environment给出相同的结果 RubyGems Environment RUBYGEMS VERS
  • 如何让 mod_wsgi 在 Mac 上运行?

    几个小时以来 我一直在尝试在 Mac 上安装最新版本的 mod wsgi 3 3 我使用的是 Snow Leopard 并且有系统附带的 Apache Apache 2 2 15 和 Python 2 6 1 r261 67515 版本 我
  • 如何合并非常大的 numpy 数组?

    我会有很多Numpy https docs scipy org doc numpy 1 14 0 reference arrays https docs scipy org doc numpy 1 14 0 reference arrays
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • Spyder 无法启动:spyder:找不到命令

    我已经安装了spyderpip3 install spyder在苹果电脑上 但是 当我无法从 bash 启动它时 它会显示spyder command not found 我已按照其说明进行操作Github页面 https github c
  • 监控 Thunderbolt 端口连接的变化

    我正在满足一个要求 需要监视 Thunderbolt 端口连接的变化 当 Thunderbolt 电缆连接或断开时 我尝试使用IOServiceMatching kIOUSBInterfaceClassName from IOKit框架但我
  • 在开发过程中自动允许访问 MacOS 辅助功能 API

    我正在开发一个使用辅助功能 API 的应用程序 每次我进行更改和重建时 我都必须删除该应用程序并将其重新添加到下面的 安全和隐私 可访问性 视图中 一段时间后这会变得非常烦人 有没有什么方法可以在开发时禁用此安全检查 或者即使应用程序本身正
  • 考虑预分配速度[重复]

    这个问题在这里已经有答案了 我正在做以下事情 for i 1 m index 0 for j 1 n index index values i j 2 j 1 if j 1 symbol chip chip values index 1 e
  • 指针数组与元素数组

    今天早上我和一位同事就这个话题进行了讨论 他说 将数组分配为指针数组总是更好 因为单独分配每个元素更有机会获得空闲内存块 有点像这样 Consider n elements as a dynamic value int n elements
  • 为什么我可以在 /proc/pid/maps 输出中看到几个相同的段?

    测试在32位Linux上进行 代码如下 int foo int a int b int c a b return c int main int e 0 int d foo 1 2 printf d n d scanf d e return
  • 在 OS X 上与 clang++ 链接会生成大量符号未找到错误

    我正在尝试使用 clang 编译器在 OS X 10 8 上编译一些 C 代码 包括 C 11 功能 我有一个生成目标文件的 makefile OK 然后在命令上 clang o Analysis so shared DataFile o
  • 在提交到 Mac App Store 的应用程序中调用 openssl 是否可以接受?

    我有点不清楚调用提交到 App Store 的应用程序之外的进程的规则是什么 我读到 如果您想使用 Cocoa 和 OSX 库之外的其他库 框架 您必须将其包含在您的应用程序中 例如 如果使用 QT Python 或 Ruby 编写应用程序
  • 如何删除以前的 ViewController

    我是一名学生 对编程还很陌生 我正在尝试在业余时间学习 Objective C Swift 我使用 spriteKit 和 swift 制作了一个游戏 有多个菜单 场景 我正在尝试从一个视图控制器转换到另一个视图控制器 为此 我使用了以下代

随机推荐