Ссылка CMMemoryPool
Когда большие блоки памяти должны неоднократно выделяться, освобождаться, затем перераспределяться, этот документ описывает API, используемый для оптимизации выделения памяти.
CMMemoryPool является службой выделения памяти, содержащей на пул недавно освобожденной памяти. Это - цель, должен ускорить последующие выделения того же размера. Этот API предназначается для случаев, где должны неоднократно выделяться блоки памяти большой емкости. Одним примером было бы приложение кодирования видео, какие выводы сжали данные.
Все его выделения находятся на гранулярности размеров страницы. Это не делает sub, выделяют память в страницах, таким образом, это - плохой выбор для выделения крошечных блоков. Например, является надлежащим использовать CMMemoryPool
как blockAllocator
параметр в CMBlockBufferCreateWithMemoryBlock
метод, но не как structureAllocator
параметр, использовать kCFAllocatorDefault
вместо этого.
Когда Вы больше не должны будете выделять память от пула, вызвать CMMemoryPoolInvalidate
и CFRelease
. Вызов CMMemoryPoolInvalidate
говорит пулу прекращать содержать на память для повторного использования. Обратите внимание на то, что пул CFAllocator
может пережить пул, вследствие способа, которым разработан CoreFoundation: CFAllocators
самостоятельно объекты CF и каждый объект, выделенный с a CFAllocator
неявно сохраняет CFAllocator
пока это не завершено. После CMMemoryPool
лишен законной силы или завершен, CFAllocator
выделяет и освобождает без объединения поведения.
CMMemoryPool
освобождает память, если она не была переработана за 0,5 секунды, так, чтобы краткосрочное пиковое использование не вызывало персистентное чрезмерное увеличение размера (Этот период может быть переопределен путем указания kCMMemoryPoolOption_AgeOutPeriod
). Такое «старение» сделано во время пула CFAllocatorAllocate
и CFAllocatorDeallocate
методы.
-
Создает новое
CMMemoryPool
.Объявление
Swift
func CMMemoryPoolCreate(_
options
: CFDictionary!) -> Unmanaged<CMMemoryPool>!Objective C
CMMemoryPoolRef CMMemoryPoolCreate ( CFDictionaryRef options );
Параметры
options
Базовый словарь Основы, содержащий опции, которые будут использоваться для создания нового
CMMemoryPool
.Возвращаемое значение
Ссылка на недавно создаваемый
CMMemoryPool
Объект.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.8 и позже.
-
Возвращает пул
CFAllocator
.Объявление
Swift
func CMMemoryPoolGetAllocator(_
pool
: CMMemoryPool!) -> Unmanaged<CFAllocator>!Objective C
CFAllocatorRef CMMemoryPoolGetAllocator ( CMMemoryPoolRef pool );
Параметры
pool
Пул памяти, средство выделения которого определяется.
Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.8 и позже.
-
Освобождает всю память, которую пул содержал для переработки.
Объявление
Swift
func CMMemoryPoolFlush(_
pool
: CMMemoryPool!)Objective C
void CMMemoryPoolFlush ( CMMemoryPoolRef pool );
Параметры
pool
Пул, содержащий память, которая будет выпущена.
Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.8 и позже.
-
Когда
CMMemoryPoolInvalidate
вызывается средство выделения пула прекращает перерабатывать память.Объявление
Swift
func CMMemoryPoolInvalidate(_
pool
: CMMemoryPool!)Objective C
void CMMemoryPoolInvalidate ( CMMemoryPoolRef pool );
Обсуждение
Когда этот метод вызывают, пул освобождает любую память, которую это содержало для переработки. Освобождение также происходит когда сохранить количество
CMMemoryPool
опускается до нуля, хотя под GC может быть задержано освобождение.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.8 и позже.
-
Возвращает уникальный идентификатор непрозрачного типа к который
CMMemoryPool
объект принадлежит.Объявление
Swift
func CMMemoryPoolGetTypeID() -> CFTypeID
Objective C
CFTypeID CMMemoryPoolGetTypeID ( void );
Возвращаемое значение
Значение типа
CFTypeID
это идентифицирует непрозрачный типCMMemoryPool
.Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.8 и позже.
-
Ссылка на a
CMMemoryPool
объект.Объявление
Swift
typealias CMMemoryPoolRef = CMMemoryPool
Objective C
typedef struct OpaqueCMMemoryPool *CMMemoryPoolRef
Оператор импорта
Objective C
@import CoreMedia;
Swift
import CoreMedia
Доступность
Доступный в OS X v10.8 и позже.
-
Вы указываете этот ключ в Базовом словаре Основы при вызывании функций такой как
CMMemoryPoolCreate
.Объявление
Swift
let kCMMemoryPoolOption_AgeOutPeriod: CFString!
Objective C
const CFStringRef kCMMemoryPoolOption_AgeOutPeriod
Константы