Вопросы производительности при смешивании C ++ и Objective-C в одном файле - PullRequest
3 голосов
/ 06 мая 2010

У меня есть высокопроизводительный C ++, который мне нужен для взаимодействия с Objective-C, есть ли какое-то снижение производительности для простого выгрузки этого кода в файл .mm, содержащий мой код Objective-C, вместо того, чтобы оставлять этот код в отдельном Файл .cpp и извлечение всех функций, которые мне нужно вызвать из файла .mm?

Ответы [ 4 ]

4 голосов
/ 06 мая 2010

Здесь есть несколько проблем.

(1) если ваш код движка C ++ работает изолированно - если Objective-C действует как внешний интерфейс, который запускает базовый движок - тогда вообще никакого наказания нет. Биты C ++ в ObjC ++ компилируются так же, как и обычный C ++.

(2) Если вы звоните в Objective-C из механизма вычислений, то у вас может возникнуть проблема с производительностью. При вызове метода Objective-C возникают накладные расходы - objc_msgSend () не бесплатен (но близок к нему), но обычно недостаточно, чтобы быть проблемой по сравнению, скажем, с вызовом функции , Тем не менее, в высокооптимизированном C ++, компиляторе могут быть оптимизации, которые в значительной степени устраняют даже издержки вызова функций (они становятся сложными). Вызов метода Objective C не может быть встроен или оптимизирован.

(3) Если вы не измеряли это и обнаружили проблему с производительностью, не беспокойтесь об этом ...

1 голос
/ 06 мая 2010

На первый взгляд кажется, что производительность не снизится, но на самом деле, если вы не обладаете глубокими знаниями о том, что делает компилятор и среда выполнения, особенно во время оптимизации, вы никогда не узнаете, пока не попробуете. Так что сделайте снимок, профилируйте его и выясните, есть ли у вас удар по производительности.

0 голосов
/ 06 мая 2010

Без штрафа, один и тот же компилятор обрабатывает часть C ++ независимо от того, в каком файле он находится.

Я подозреваю, что могут быть даже некоторые преимущества, если вам не нужно оборачивать код C ++ в функции "extern C".

0 голосов
/ 06 мая 2010

Objective-C компилируется до сборки, так же, как C ++, я не мог понять, как вы отреагируете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...