Какао обеспечивает выровненные по страницам области памяти, которые он вызывает Зоны памяти , и предоставляет несколько функций управления памятью, которые принимают зону в качестве аргумента.
Предположим, вам нужно выделить блок памяти (не для объекта, а для произвольных данных). Если вы наберете malloc(size)
, буфер всегда будет выделен в зоне по умолчанию. Однако кто-то, возможно, использовал allocWithZone:
для размещения вашего объекта в другой зоне, кроме стандартной. В этом случае было бы лучше использовать NSZoneMalloc([self zone], size)
, который хранит ваш буфер и объект-владелец в одной и той же области памяти.
Ты следуешь этой практике? Вы когда-нибудь использовали зоны памяти?
Обновление: я думаю, что в Stack Overflow существует тенденция отвечать на вопросы по низкоуровневым темам с помощью лекции о преждевременной оптимизации. Я понимаю, что зоны, вероятно, имели большее значение в 1993 году на оборудовании NeXT, чем сегодня, и поиск в Google показывает, что практически никто не заинтересован в них. В любом случае я прошу посмотреть, может ли кто-нибудь описать проект, в котором он использовал зоны памяти.