Как я могу выделить NSObject на его собственной странице виртуальной памяти в iOS?


Я хочу выделить 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
Я понимаю, что это хак, но будет ли он работать последовательно? Есть ли лучший способ?
2 2

2 ответа:

Из twitter:

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 - это ответ.

Я не думаю, что как пользовательское приложение вы должны иметь какой-либо контроль над назначениями виртуальной памяти. Приложения в iOS находятся в песочнице.