При профилировании игры для iOS на iPhone 3G инструменты сообщают, что системный вызов pthread_setspecific (который вызывается из многих, казалось бы, не связанных между собой мест) является самым большим узким местом ЦП. Google говорит мне, что это связано с хранением метаданных для потоков, однако я не уверен, как это отследить, так как весь движок является одним потоком. Это связано с CADisplayLink? Могу ли я оптимизировать конкретные сценарии, чтобы лучше учесть это?
Вот некоторая соответствующая информация, которая может помочь при ответе на мои вопросы:
- Устройство: iPhone 3G
- версия iOS: 4.2.1
- Код игры полностью на C ++, с прикладным уровнем в obj-C.
- В игре используется OpenglES1.1
- К сожалению, оба исключения RTTI и C ++ являются обязательными и, следовательно, включены.
- Выполняется сборка релиза (с символами отладки) через профилировщик CoreAnimation в инструментах.