Страницы

Производительность ООП в C, Objective-C, C++

При создании программ на С в редких случаях, когда мне это нужно, я использую ООП, несмотря на нетипичность этого подхода для C.

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

Я решил протестировать это на сортировке, принимающей на вход массив указателей на произвольные элементы и объект, умеющий сравнивать эти элементы. Реализовал код для трех языков: C, Objective-C и C++, что позволило проверить все результаты на одном компиляторе - clang. Несмотря на наличие шаблонов в С++ они могут быть неприменимы в случае если, к примеру, способ сравнения элементов будет получен динамически.

исходный код

Результаты тестов для Objective-C и C++, поделенные на результаты для С представлены в таблице 

 Язык С++    Objective-C 
 Время работы 1,12 2,31
 Размер исходников 0,67 0,8
 Размер объектников   1,02 2,09

В тестовом примере ни C++, ни Objective-C варианты не показали существенных возможностей по контролю правильности ООП - кода по сравнению с C.

Измерение производительности безопасного приведения от общего типа к конкретному или, иными словами, от потомка к наследнику.

2 комментария:

  1. Ответы
    1. В 2013 собственный транслятор был только в планах, а остальные меня не интересовали, так как я не нашёл для них применения у себя, а это было сугубо практическое сравнение.

      Удалить