Вы когда-нибудь использовали NS-Зон-Маллок () вместо маллока ()?

Какао обеспечивает области памяти, выровненные по страницам, которые он называет Memory Zones, and provides a few memory management functions that take a zone as an argument. , и предоставляет несколько функций управления памятью, которые принимают зону в качестве аргумента.

Допустим, вам нужно выделить блок памяти (не для объекта, а для произвольных данных). При вызове malloc(size), the buffer will always be allocated in the default zone. However, somebody may have used буфер всегда будет выделен в зоне по умолчанию. Тем не менее, кто-то, возможно, использовал allocWithZone: to allocate your object in another zone besides the default. In that case, it would seem better to use для выделения объекта в другой зоне, кроме по умолчанию. В этом случае, казалось бы, лучше использовать NSZoneMalloc([self zone], size), which keeps your buffer and owning object in the same area of memory. , который держит ваш буфер и владеющий объектом в той же области памяти.

Вы следуете этой практике? Вы когда-нибудь использовали зоны памяти?

Обновление: Я думаю, что есть тенденция на стек переполнения ответить на вопросы о низком уровне темы с лекцией о преждевременной оптимизации. Я понимаю, что зоны, вероятно, имеет большее значение в 1993 году на аппаратном обеспечении NeXT, чем сегодня, и поиск Google дает понять, что практически никто не имеет к ним никакого отношения. Я спрашиваю в любом случае, чтобы увидеть, если кто-то может описать проект, где они использовали зоны памяти.

Ответ на: "Вы когда-нибудь использовали NS-Зон-Маллок () вместо маллока ()?"

Количество ответов:3

Если вы окажетесь делать это, вы, вероятно, работает на более низком уровне, чем вы действительно должны быть. Подсистема в значительной степени игнорирует их; любые звонки на +alloc or such will get you objects in the default zone. или такие помогут вам объекты в зоне по умолчанию. malloc and и NSAllocateCollectable are all you need to know. - все, что вам нужно знать.

Вы абсолютно правы во всем своем вопросе, но на практике никто не использует зоны. Как страница вы ссылку на ставит его:

В большинстве случаев, используя зону по умолчанию быстрее и эффективнее, чем создание отдельной зоны.

Преимущество создания собственной зоны:

Если ошибка страницы происходит при попытке получить доступ к одному из объектов, загрузка страницы приносит все связанные объекты, что может значительно уменьшить количество будущих ошибок страницы.

Если ошибка страницы происходит, это означает, что система недавно выгуливать вещи и, следовательно, медленно в любом случае, и что либо ваше приложение не несет ответственности или решение находится в той части вашего приложения, что выделено слишком много памяти сразу, в первую очередь.

Таким образом, в основном, вопрос в том, #8220;вы можете доказать, что вам действительно нужно создать свою собственную зону, чтобы исправить проблему производительности или сделать ваше приложение злой fast'#8221;, и ответ на этот вопрос является #8220; no'#8221;.

Я написал программное обеспечение для NeXTStep, GNUstep на Linux и какао на Mac OS X, и никогда не нужно использовать пользовательские зоны памяти. Условие, которое могло бы предложить его как хорошее улучшение программного обеспечения либо никогда не возникало, или никогда не были обнаружены как значительные.