& quot; Цель C & quot; против «C ++» : разница в утверждении для вызова метода

Я хотел бы понять, что на самом деле происходит, когда процессор выполняет машинный код для оператора Objective C [ object method ] с тем, что происходит при выполнении оператора C ++ object->method(),

Могут ли быть значительные различия в таких аспектах, как производительность или надежность приложения? Почему или почему нет?

Любая ссылка на примеры или доказательства приветствуется.

1

Решение

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

Основное, основное различие заключается в том, что [object method] отправляется во время выполнения, тогда как во многих случаях для C ++ он отправляется во время компиляции.

Таким образом, для отправки в Obj-C вызывается актуальная подпрограмма с указателем на объект, дескриптором сообщения и затем аргументами. Эта подпрограмма использует дескриптор для индексации в таблице методов для класса, а затем вызывает соответствующую логику. Вот почему вы можете отправлять сообщения объекту, который на самом деле не реализует эти сообщения (и, таким образом, получать диспетчеризацию для didNotImplement). Большая часть гибкости в Obj-C сосредоточена на этой функциональности диспетчеризации во время выполнения.

В C ++ это может быть немного больше, чем просто вызов функции через указатель. В простом классе методы поддерживаются в статической структуре во время компиляции, и компилятор может напрямую указывать в этот список, чтобы найти указатель на функцию, реализующую логику. Поэтому во время выполнения поиск не требуется. В этом отношении C ++ может быть быстрее, чем Obj-C для отправки метода.

Это уровень 30 000 футов. С виртуальными методами C ++ и современной средой исполнения Obj-C все иначе. И я не могу ничего сказать о возможностях современного C ++ и о том, как он может расширить возможности диспетчеризации. Кроме того, современная среда выполнения Obj-C действительно безумно эффективна. Я думаю, что отправка по ARM может быть порядка 10 инструкций или что-то в этом роде.

3

Другие решения


По вопросам рекламы [email protected]