При создании программ на С в редких случаях, когда мне это нужно, я использую ООП, несмотря на нетипичность этого подхода для C.
Недавно я задался вопросом производительности подобного подхода. Понятно, что вручную я пишу больше кода, получаю меньше контроля со стороны компилятора по сравнению с языками, поддерживающими ООП. Но также мне интересна скорость работы. Теоретически, компиляторы ООП - языков могут хитро оптимизировать и создавать даже более эффективный объектный код, чем ручные операции в C.
Я решил протестировать это на сортировке, принимающей на вход массив указателей на произвольные элементы и объект, умеющий сравнивать эти элементы. Реализовал код для трех языков: C, Objective-C и C++, что позволило проверить все результаты на одном компиляторе - clang. Несмотря на наличие шаблонов в С++ они могут быть неприменимы в случае если, к примеру, способ сравнения элементов будет получен динамически.
исходный кодРезультаты тестов для Objective-C и C++, поделенные на результаты для С представлены в таблице
Язык | С++ | Objective-C |
Время работы | 1,12 | 2,31 |
Размер исходников | 0,67 | 0,8 |
Размер объектников | 1,02 | 2,09 |
А где, Оберон, камрад?
ОтветитьУдалитьВ 2013 собственный транслятор был только в планах, а остальные меня не интересовали, так как я не нашёл для них применения у себя, а это было сугубо практическое сравнение.
Удалить