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