2

我想将一个分配NSObject到它自己的虚拟内存页面上。这可能吗?如果我们仍然可以使用NSZones 似乎微不足道,但它们已被弃用。我尝试使用NSZoneFromPointer,但它总是返回nil。根据分配内存的提示

对于大内存分配,其中大的不仅仅是几个虚拟内存页面,malloc 自动使用 vm_allocate 例程来获取请求的内存。

因此,似乎我应该能够使我的对象像几页一样大:

@interface MyObject : NSObject {
int[40960]; // 4096 is the default page size, so this is 10 pages.
}

@implementation MyObject
@end

我意识到这是一个 hack,但它会始终如一地工作吗?有没有更好的办法?

4

2 回答 2

2

来自推特

objc_constructInstance(...) 可能会让你做你想做的事......

来自<objc/runtime.h>

/** 
 * Creates an instance of a class at the specific location provided.
 * 
 * @param cls The class that you wish to allocate an instance of.
 * @param bytes The location at which to allocate an instance of \e cls.
 *  Must point to at least \c class_getInstanceSize(cls) bytes of well-aligned,
 *  zero-filled memory.
 *
 * @return \e bytes on success, \c nil otherwise. (For example, \e cls or \e bytes
 *  might be \c nil)
 *
 * @see class_createInstance
 */
OBJC_EXPORT id objc_constructInstance(Class cls, void *bytes) 
    __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_3_0)
    OBJC_ARC_UNAVAILABLE;

看起来objc_constructInstance就是答案。

于 2013-10-15T04:15:16.910 回答
-2

我认为作为用户级应用程序,您不应该对虚拟内存分配进行任何控制。iOS 中的应用程序位于沙盒中。

于 2013-10-14T14:41:06.740 回答