gpt4 book ai didi

macos - 如何在进程启动时降低 IOKit 保留的内存量?

转载 作者:行者123 更新时间:2023-12-03 20:19:45 28 4
gpt4 key购买 nike

我是一名开发人员,正在开发一个非常大的内存密集型 32 位应用程序。耗尽虚拟地址空间(内存)对我们来说是一个问题。在调查最近的一些问题时,我注意到有一大块内存被 IOKit (512MB) 保留。该内存未分配,仅保留。进一步调查表明,大多数应用程序(Safari、iTunes 等)也都保留了这块内存。它似乎保持未分配状态。我正在使用 vmmap 进行测试。例如,这是一个使用 XCode 制作的 Cocoa 应用程序,使用默认模板:

REGION TYPE                      VIRTUAL
=========== =======
CG backing stores 1008K
CG image 4K
CG raster data 64K
CG shared images 2252K
Carbon 7264K
CoreGraphics 16K
IOKit (reserved) 512.0M reserved VM address space (unallocated)
MALLOC 59.0M see MALLOC ZONE table below
MALLOC guard page 48K
MALLOC metadata 348K
Memory tag=242 12K
STACK GUARD 56.0M
Stack 8712K
VM_ALLOCATE 16.2M
__DATA 8296K
__IMAGE 1240K
__LINKEDIT 31.5M
__TEXT 76.7M
__UNICODE 536K
mapped file 27.4M
shared memory 1320K
=========== =======
TOTAL 809.2M
TOTAL, minus reserved VM space 297.2M

我能做些什么来减少或消除那个内存池?我们的应用程序真的可以使用那 512MB 的空间!!!

编辑:我做了一些更多的研究,这块内存似乎是映射到用户空间的显卡帧缓冲区。所以我想一个更准确的问题是是否有任何限制帧缓冲区接管用户模式虚拟地址空间的这么大一部分?

编辑:做了一些进一步的测试,发现需要改变的关键是 IOFBMemorySize。如图所示,如果你执行这个命令:
ioreg -l | grep IOFBMemorySize

或者您可以在 IORegistryExplorer 中看到它。不过,我未能成功更改该值。我尝试将它添加到 ATIFramebuffer.kext 的 Info.plist,不好。我尝试编写一个调用 IOConnectSetCFProperty 的程序,但它返回了 kIOReturnUnsupported。

编辑:经过更多研究,似乎这个 IOFBMemorySize 键可能是只读的,只需报告视频卡上的可用内存量。 CoreGraphics 的 Configuration.plist 中似乎有一些有趣的值,但它们似乎都不会影响内存分配(即使在重新启动后)。

最佳答案

我认为你正在以错误的方式看待这个问题。

A) IOKit 没有为帧缓冲区占用 512MB 的内存。

B) 它在表中说明您发布了 reserved VM address space (unallocated)所以这可能是映射为虚拟内存空间的驱动器内存。

C) 如果正在运行的应用程序内存不足,则需要以不同的方式构造它,检查分配和泄漏,并在必要时执行缓存和延迟获取。

关于macos - 如何在进程启动时降低 IOKit 保留的内存量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6495478/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com