История изменений
Исправление alysnix, (текущая версия) :
Я тебе открою тайну, но ты ошибся. Когда я говорю, что С++ и скорость не совместимы - я говорю о тех С++, о которых говорят и которые представляют птушники.
причем тут петеушники. все мы когда-то писались под себя и ходили на горшок. и были студентами или петеушниками.
некоторый оверхед в плюсах дают такие фичи плюсов:
-
rtti - нужно для dynamic_cast<>, не применяйте dynamic_cast<>. конкретный тип можно устанавливать по собственным тегам. rtti отлючается опцией компилятора. в gcc - -fno_rtti.
-
множественное наследование - приводит к коду подмены this, при обращению к полям классов и их виртуальным методам, что не стоят первым в списке наследования.
-
виртуальные методы, а также деструкторы - приводят к формированию таблиц виртуальных методов, и вызову актуальных методов через них. если можно обойтись без виртуальных методов(а порой без них обойтись нельзя) - не делайте виртуальные методы зря.
-
если метод должен быть статическим - делать статическим, чтобы не передавался указатель на экземпляр класса.
-
локальные статические переменные в фунции A& ff(){ static A __; return __; } имеют доп. скрытое поле типа bool, показывающее запускался ли конструктор на это поле, а он запускается при первом вызове, а потом всегда при обращению к полю проверяется стоит ли поле в true.
-
линкеру можно подсунуть полностью свой рантайм C++. там надо определить с полдюжины мелких символов, и ваш код на с++ работает.
я так под голые железки код писал. нужен только начальный загрузчик и примитивный собственный рантайм, а все остальное чисто код на плюсах. никакой си не нужен. си это прошлый век
Исправление alysnix, :
Я тебе открою тайну, но ты ошибся. Когда я говорю, что С++ и скорость не совместимы - я говорю о тех С++, о которых говорят и которые представляют птушники.
причем тут петеушники. все мы когда-то писались под себя и ходили на горшок. и были студентами или петеушниками.
некоторый оверхед в плюсах дают такие фичи плюсов:
-
rtti - нужно для dynamic_cast<>, не применяйте dynamic_cast<>. конкретный тип можно устанавливать по собственным тегам. rtti отлючается опцией компилятора. в gcc - -fno_rtti.
-
множественное наследование - приводит к коду подмены this, при обращению к полям классов и их виртуальным методам, что не стоят первым в списке наследования.
-
виртуальные методы, а также деструкторы - приводят к формированию таблиц виртуальных методов, и вызову актуальных методов через них. если можно обойтись без виртуальных методов(а порой без них обойтись нельзя) - не делайте виртуальные методы зря.
-
если метод должен быть статическим - делать статическим, чтобы не передавался указатель на экземпляр класса.
-
локальные статические переменные в фунции A* ff(){ static A __; return __; } имеют доп. скрытое поле типа bool, показывающее запускался ли конструктор на это поле, а он запускается при первом вызове, а потом всегда при обращению к полю проверяется стоит ли поле в true.
-
линкеру можно подсунуть полностью свой рантайм C++. там надо определить с полдюжины мелких символов, и ваш код на с++ работает.
я так под голые железки код писал. нужен только начальный загрузчик и примитивный собственный рантайм, а все остальное чисто код на плюсах. никакой си не нужен. си это прошлый век
Исходная версия alysnix, :
Я тебе открою тайну, но ты ошибся. Когда я говорю, что С++ и скорость не совместимы - я говорю о тех С++, о которых говорят и которые представляют птушники.
причем тут петеушники. все мы когда-то писались под себя и ходили на горшок. и были студентами или петеушниками.
некоторый оверхед в плюсах дают такие фичи плюсов:
- rtti - нужно для dynamic_cast<>, не применяйте dynamic_cast<>. конкретный тип можно устанавливать по собственным тегам. rtti отлючается опцией компилятора. в gcc - -fno_rtti.
множественное наследование - приводит к коду подмены this, при обращению к полям классов и их виртуальным методам, что не стоят первым в списке наследования.
виртуальные методы, а также деструкторы - приводят к формированию таблиц виртуальных методов, и вызову актуальных методов через них. если можно обойтись без виртуальных методов(а порой без них обойтись нельзя) - не делайте виртуальные методы зря.
если метод должен быть статическим - делать статическим, чтобы не передавался указатель на экземпляр класса.
локальные статические переменные в фунции A* ff(){ static A __; return __; } имеют доп. скрытое поле типа bool, показывающее запускался ли конструктор на это поле, а он запускается при первом вызове, а потом всегда при обращению к полю проверяется стоит ли поле в true.
опять же сборщику можно подсунуть полностью свой рантайм C++. там надо определить с полдюжины мелких символов, и ваш код на с++ работает.
я так под голые железки код писал. нужен только начальный загрузчик и примитивный собственный рантайм, а все остальное чисто код на плюсах. никакой си не нужен. си это прошлый век