Автор Тема: Безопасность и Си.  (Прочитано 11382 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Безопасность и Си.
« Ответ #15 : Январь 15, 2014, 10:56:21 am »
Странно. Пример можно? А если отключить исключения и выкинуть рантайм (это в опциях компилятора есть)?
Отключить рантайм я не могу, не поработав над проектом дополнительно, что мне разумеется не нужно. Как отключить исключения - не знаю, нас ведь уверяют, что в С++ не платят за то, что не используют. Разумеется, в проекте исключений нет. Сам проект, увы, привести не могу. Вот что показывают результаты эксперимента:
gcc - 4.4.3, strip 2.20.1, valgrind - 3.6.0
Язык    Размер    Callgrind refs
Си1533201,489,518,733
С++1902521,532,850,808
Проект для ПК, но теоретически соотношение может соблюдаться и для специализированных версий gcc.
Не в случае исключений :-) Ну, то есть да, на скорость они считай не влияют, но стек таки жрут. Тем более что если они тебе не нужны, их нужно отключить явным образом: -fno-exceptions (это опция для gcc). Попробуй плиз.

Во-вторых таки valgrind - он не про скорость, а про безопасность, и привносит свой оверхед, причем скорее всего разный для разных языков.
Y = λf.(λx.f (x x)) (λx.f (x x))

Wlad

  • Jr. Member
  • **
  • Сообщений: 91
    • Просмотр профиля
Re: Безопасность и Си.
« Ответ #16 : Январь 15, 2014, 11:04:48 am »
Скажем тот же Astrobe вроде бы вполне успешно решает задачи, народ не стенает и не мучается, хотя там Оберон.

Конечно не мучается.
Некому просто.
Или - исчезающе малый процент. Практически - на уровне статпогрешности. :)

Ексельсиоровцы вроде бы вполне оный Ексельсиор на модуле-2 написали, и тоже без особых страданий. А это же юникс. Ну и так далее.

Экселсиор - не "это же юникс". :)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Безопасность и Си.
« Ответ #17 : Январь 15, 2014, 11:16:08 am »
Скажем тот же Astrobe вроде бы вполне успешно решает задачи, народ не стенает и не мучается, хотя там Оберон.

Конечно не мучается.
Некому просто.
Или - исчезающе малый процент. Практически - на уровне статпогрешности. :)
Ну, те кто пользуют, вроде не стенают :-) Хотя, вот отсутствие отладчика для этого класса задач дико бесит. Отладочная печать в com-порт ведь далеко не всегда будет работать если что-то пошло действительно не так. Ну, то есть словил ASSERT/HALT, и... ничего! Просто не работает.

Ексельсиоровцы вроде бы вполне оный Ексельсиор на модуле-2 написали, и тоже без особых страданий. А это же юникс. Ну и так далее.

Экселсиор - не "это же юникс". :)
Ну, есть что-то в нем такое, юниксообразое, в операционке этой. :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

Wlad

  • Jr. Member
  • **
  • Сообщений: 91
    • Просмотр профиля
Re: Безопасность и Си.
« Ответ #18 : Январь 15, 2014, 11:22:19 am »
Ну, те кто пользуют, вроде не стенают :-) Хотя, вот отсутствие отладчика для этого класса задач дико бесит. Отладочная печать в com-порт ведь далеко не всегда будет работать если что-то пошло действительно не так. Ну, то есть словил ASSERT/HALT, и... ничего! Просто не работает.
Не в этом дело.
Не применяе5тся он нгдк по-серьёзному.
Те, кто пишет ПО для "ящиков с картошкой на балконе" - пользуют взломанное или свободное от грандов отрасли, чьи кристаллы используются.
А для оборонки и всего остального - сертификация нужна. А Астроб этого в планах не имеет...

Ну, есть что-то в нем такое, юниксообразое, в операционке этой. :-)
Синтаксис командной оболочки немножко похож.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Безопасность и Си.
« Ответ #19 : Январь 15, 2014, 11:26:09 am »
Ну, те кто пользуют, вроде не стенают :-) Хотя, вот отсутствие отладчика для этого класса задач дико бесит. Отладочная печать в com-порт ведь далеко не всегда будет работать если что-то пошло действительно не так. Ну, то есть словил ASSERT/HALT, и... ничего! Просто не работает.
Не в этом дело.
Не применяе5тся он нгдк по-серьёзному.
Те, кто пишет ПО для "ящиков с картошкой на балконе" - пользуют взломанное или свободное от грандов отрасли, чьи кристаллы используются.
А для оборонки и всего остального - сертификация нужна. А Астроб этого в планах не имеет...
Не, ну вон, не дешевые беспилотники пилят на нем: http://www.astrobe.com/forum/viewtopic.php?f=3&t=400 То есть это именно контора-разработчик этого Брат'а автопилот для него на Astrobe ваяет.

Ну, есть что-то в нем такое, юниксообразое, в операционке этой. :-)
Синтаксис командной оболочки немножко похож.
Ну и все остальное тоже, немножко похоже :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Безопасность и Си.
« Ответ #20 : Январь 15, 2014, 11:56:51 am »
Не в случае исключений :-) Ну, то есть да, на скорость они считай не влияют, но стек таки жрут. Тем более что если они тебе не нужны, их нужно отключить явным образом: -fno-exceptions (это опция для gcc). Попробуй плиз.
Да, без исключений - лучше.
Язык    Размер    Callgrind refs
Си1533201,489,518,733
С++1902521,532,850,808
С++ no-exceptions1574241,532,532,864

Во-вторых таки valgrind - он не про скорость, а про безопасность, и привносит свой оверхед, причем скорее всего разный для разных языков.
Далеко не только про безопасность. С опцией --tool=callgrind он становится хорошим профилировщиком, но и помимо callgrind в --tool= ещё есть интересное. Число, которое выдаёт инструмент коррелирует со временем выполнения, но отличается стабильностью и точностью.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Безопасность и Си.
« Ответ #21 : Январь 15, 2014, 12:15:32 pm »
Не в случае исключений :-) Ну, то есть да, на скорость они считай не влияют, но стек таки жрут. Тем более что если они тебе не нужны, их нужно отключить явным образом: -fno-exceptions (это опция для gcc). Попробуй плиз.
Да, без исключений - лучше.
Язык    Размер    Callgrind refs
Си1533201,489,518,733
С++1902521,532,850,808
С++ no-exceptions1574241,532,532,864
Осталось выяснить что такое Callgrind refs и почему у плюсового кода их так много :-)

Мой hello world (без hello world) C и C++ компиляторы преобразуют в абсолютно идентичный асм-код (за вычетом манглинга имен). Надо найти пример когда у них начнется расхождение.
Y = λf.(λx.f (x x)) (λx.f (x x))

kkkk

  • Full Member
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Безопасность и Си.
« Ответ #22 : Январь 16, 2014, 10:12:07 am »
Callgrind refs - это стоимость выполнения. valgrind выполняет программу как виртуальная машина и считает количество выполненных инструкций, помноженных на их вес.
Про много речь и не шла :) . Выяснить причину затруднительно, потому что да, на helloworld -ах не заметно, а на крупной - поди сыщи.