LINUX.ORG.RU

История изменений

Исправление 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++. там надо определить с полдюжины мелких символов, и ваш код на с++ работает.

я так под голые железки код писал. нужен только начальный загрузчик и примитивный собственный рантайм, а все остальное чисто код на плюсах. никакой си не нужен. си это прошлый век