РЕШЕНИЕ - я использовал комбинацию ручного управления (в обход сборщика мусора) и сопоставленного параметра NSData. У iStat, как выяснилось, был неправильный объем памяти, и инструменты показали ожидаемое поведение. Кроме того, вызовы CC_MD5 () и CC_SHA1 () действительно уже вызывают CC_MD5_Update () и CC_SHA1_Update (), поэтому они тоже не вызывают проблем.
В настоящее время я работаю над приложением Cocoa, которому необходимо хешировать массивные файлы с использованием SHA-1 и MD5. Я использую CC_MD5 и CC_SHA1 и читаю файл в объект NSData. Однако при этом используется огромное количество ОЗУ и по какой-то причине происходит утечка памяти, даже если объект NSData не упоминается… Я подозреваю, что сборщик мусора изо всех сил пытается не отставать.
Какой самый лучший (самый простой, если возможно, но я не прочь проделать дополнительную работу, чтобы ускорить процесс) способ выполнения хэшей MD5 и SHA-1 для таких массивных файлов, как этот?
Продолжение
Как упоминалось ниже, сопоставленные NSData могут помочь, но я думаю, что нашел другой вариант. Это все еще требует некоторой доработки, но кажется гораздо более надежным решением. Идея состоит в том, чтобы использовать NSFileHandle и читать «куски» - так что может быть максимум 256 МБ за раз. Затем (например, для MD5) используйте CC_MD5 (), за которым следует последовательность CC_MD5_Update (), чтобы вычислить хэш по частям. Сочетание этого с ручным управлением памятью должно помочь.