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

Я хочу выделить NSObject на свою страницу виртуальной памяти. Это возможно? Это кажется тривиальным, если бы мы все еще могли использовать NSZoneс, но они устарели. Я пытался с помощью 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 ответа

Решение

Из твиттера:

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 находятся в песочнице.

Другие вопросы по тегам