iPhone Objective-C, malloc или NSMutableData? - PullRequest
0 голосов
/ 12 июля 2010

Мне нужно использовать изменчивый блок памяти, чтобы постоянно записывать и перезаписывать данные внутри, используя несколько потоков.Данные будут обработаны как потокобезопасные с помощью @synchronized, если я использую либо данные malloc, либо NSMutableData.

Мой вопрос: что больше рекомендуется для скорости?Поскольку я использую рекурсивно рассчитанные уравнения для матрицы данных, мне нужно иметь возможность распределять, извлекать и устанавливать данные как можно быстрее.

Я собираюсь провести собственное исследованиепредмет, но мне было интересно, если кто-нибудь знал, что накладные расходы на Objective-C NSMutableData привел бы к снижению скорости?

1 Ответ

1 голос
/ 12 июля 2010

re: предложение psychotik: volatile - это ключевое слово в C, которое в основном говорит компилятору избегать оптимизации использования символа, к которому он прикреплен. Это важно для многопоточного кода или кода, который напрямую взаимодействует с оборудованием. Однако, это не очень полезно для работы с блоками памяти (от malloc() или NSData.) Как сказал психотик, это для использования с примитивами, такими как int или указатель (т.е. сам указатель, а не данные это указывает на.) Это не сделает ваш доступ к данным быстрее, и может фактически замедлить его, победив приемы оптимизации компилятора.

Для многопоточной синхронизации, я думаю, ваша самая быстрая ставка - OSSpinLock, если вам не нужен рекурсивный доступ, или pthread_mutex, если вам это нужно. Имейте в виду, что OSSpinLock, как следует из названия, является спин-блокировкой, поэтому определенные модели использования делают его менее эффективным, чем pthread_mutex, но он также очень близок к металлу (он основан на элементарных операциях аппаратного получения / установки). .)

Если к вашим данным действительно обращаются достаточно часто, так что вы беспокоитесь о блокировке производительности, вы, вероятно, захотите избежать NSData и просто поработать с блоком памяти из malloc() - но, не зная больше о том, чего вы пытаетесь достичь или как часто вы получаете доступ к данным, решение не может быть готово само по себе. Можете ли вы рассказать нам больше о своих намерениях?

...