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