ios - malloc 的数据是否在 objective-c 中归零?

标签 ios objective-c macos security malloc

我想知道这一点,因为如果进程 A 可以 malloc 50 兆未清零的数据,并且该内存块原来包括来自进程 B 的物理页面并且仍然包含处理 B 的数据。

最佳答案

Is malloc'd data zeroed in objective c?

大部分是。有一个零页写入器,它是内存管理器的一部分,它提供一个带有零页的进程。内存管理器将调用 memory_object_data_unavailable 告诉内核为该区域提供零填充内存。

如果进程调用 free,然后再次调用 mallocs,页面不会重新归零。清零仅在需要新页面时发生。事实上,页面可能不会在 free 时返回给系统。由于运行时,该进程保留该页面供自己使用。相关见Will malloc implementations return free-ed memory back to the system?

如果一个页面在内存不足的情况下返回给系统,即使该进程以前持有该页面,该页面也会被重新置零。内存管理器不考虑页面的最后所有者。它只是假定新页面需要归零以避免跨进程信息泄漏。

请注意,Microsoft 将其称为零页编写器。 Darwin 有相同的组件,但我不记得看到它的名字。另见 Mac OS X Internals: A Systems Approach由辛格。它有点过时,但它提供了很多系统信息。第 8 章,内存,是感兴趣的一章。

Singh 的书详细介绍了其他细节,例如需要页面但不需要归零的情况。在这种情况下,进程之间有一些共享数据,并且在写时复制(COW)方案下为进程分配了一个新页面。实际上,新页面是从现有数据而不是零数据填充的。感兴趣的函数是 memory_object_data_request

Linux 在 Some ado about zero 上对零页进行了有趣的讨论。 .关于一个表面上看似平凡的话题的有趣阅读。

关于ios - malloc 的数据是否在 objective-c 中归零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44914794/

相关文章:

macos - 更改在终端中打开的文件的默认编辑器? (例如将其设置为 TextEdit/Coda/Textmate)

ios - 如何在 SpriteKit 中制作响应式 Controller ?

iphone - 关于iPhone应用程序状态的另一个问题

ios - 我如何才能访问 iOS 的 '~/Applications'?

ios - MapBox iOS SDK 框架

objective-c - -[NSNotificationCenter postNotificationName :object:] Can I pass nil for object?

c++ - Mac OSX 上的 GCC--gcc 的多个版本

bash - mac终端计算机名乱码

ios - 启用多任务处理

ios - 更改解析请求的超时