Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Что за чушь (g++)

Автор Алексей Гринь, июля 8, 2009, 11:12

0 Пользователи и 1 гость просматривают эту тему.

myst

Цитата: jvarg от июля  8, 2009, 19:00
Не верю. Это стандартная настройка по умолчанию ЛЮБОГО компилятора, любого языка. Только в некоторых эту опцию отключить нельзя, а в некоторых можно.
:o No comments. Зачем верить? Возьмите компилятор и убедитесь сами. VC, например, даже предупреждения не выдаёт, поскольку стандарт не обязывает. Вы стандарт обсуждаемого языка читали? Некоторые компиляторы C++ поддерживают кое-какие проверки, в том числе и во время выполнения, но это абсолютно факультативные вещи, и по умолчанию они естественно выключены.

Цитата: jvarg от июля  8, 2009, 19:00
Конкретно с gсс я не работал (ибо давно забросил программерство), но во всех предыдущих инкарнациях С++ был в настройках раздел типа "exeption handling", где вся эта фигня настраивалась, и по умолчанию были включены все проверочные подстановки кода...
Обработка исключений — это совсем другая история.

Алексей Гринь

Та-а-ак. Сегодня цифры по скорости другие :) С удалением этого места ускоряется. Хотя ничего не менял в теле цикла. Хе-хе.

Цитата: myst от июля  8, 2009, 16:44
А посмотреть ассемблерный код, ты не догадался?
Ну блин, при работе с Plain C никогда не приходилось. Всё быстро, всё как надо, без всякой самодеятельности. Сказал — сделает. Не сказал — не сделает.

Цитата: myst от июля  8, 2009, 18:00
Кстати, gcc ещё довольно предупредителен
Ага. У меня там возвращается неполный тип (не очень вкуриваю, чем он неполон), и поэтому приходится писать typename Map<K, V>::Node вместо Map<K, V>::Node — g++ ругается (мол, синтаксический парсер не может явно определить, что это тип, а не, скажем, глобальная переменная). А MC++ (2003 года выпуска at least), я слышал, пытается сам определить, что это такое по контексту. Во-первых, не факт, что он определит верно. Во-вторых, такая программа не переносима (т.е. при переносе под gcc будешь долго пытаться вкурить, чо такое случилось). В-третьих, это вроде бы не по стандарту.

Цитата: jvarg от июля  8, 2009, 19:04
Кстати, движок форума не дает мне вставить "g плюс плюс", где вместо "плюс" стоит "+".

Выдает:

Forbidden
You don't have permission to access /index.php on this server.
Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
Ага :( Это всё козни микрософтцев :)
肏! Τίς πέπορδε;

myst

Чего делаешь-то хоть, расскажи. :)

GaLL

А сколько итераций в цикле и сколько времени он работает? Если >= секунде, то флуктуации в ~40 мс - обычное дело.

Алексей Гринь

Цитата: GaLL от июля  9, 2009, 05:42
Если >= секунде, то флуктуации в ~40 мс - обычное дело.
Не, одно дело когда эти флуктуации случайны, по вине Винды, и каждый раз то +40 мс, то -40мс, то +100мс — не определить.
А тут было стойкое правило: удаляешь — умедляется, добавляешь — ускоряется. Каждый раз повторялось. Значит это где-то компилятор что-то без моего ведома вставил...

Цитата: myst от июля  9, 2009, 05:39
Чего делаешь-то хоть, расскажи. :)
Да так... :) Экспериментирую со скоростью алгоритмов... Вчера каждый час выигрывал по 100 мс, по капельке то там, то сям подчищая... А тут — нате.

Чувствую, вообщем, ничего лучше Plain C нету. Он просто идеальнейший по простоте и чистоте язык :) Щас думаю накатать себе диздок для правильной имплементации ООП под ним (костыль, зато надёжный).
肏! Τίς πέπορδε;

GaLL

Может быть дело в том, что при удалении части кода адреса джампов так же смещаются, а джамп на начало параграфа (т. е. на адрес, кратный 16) часто более эффективен (по крайней мере, это верно для джапмов, образующих циклы; кроме того, не зря же нормальные компиляторы обычно выравниваниют адреса подпрограмм по 16 байт)?

jvarg

Пошарился сейчас в яндексе. Все-таки, нужно явно отключать скрытые проверки, служебные и отладочные коды при помощи флагов компилятора.

Что-то вроде: "-fno-rtti -fno-exceptions"

Поройтесь в описании флагов.
Все боятся быть обвинёнными в ксенофобии. А вот в русофобии никто.
(© Захар Прилепин)

myst

Цитата: jvarg от июля  9, 2009, 08:26
Пошарился сейчас в яндексе. Все-таки, нужно явно отключать скрытые проверки, служебные и отладочные коды при помощи флагов компилятора.
Чиво? :o В gcc? Линки — студию!

Цитата: jvarg от июля  9, 2009, 08:26
Что-то вроде: "-fno-rtti -fno-exceptions"
Это не в тему.

myst

Цитата: GaLL от июля  9, 2009, 07:12
Может быть дело в том, что при удалении части кода адреса джампов так же смещаются, а джамп на начало параграфа (т. е. на адрес, кратный 16) часто более эффективен (по крайней мере, это верно для джапмов, образующих циклы; кроме того, не зря же нормальные компиляторы обычно выравниваниют адреса подпрограмм по 16 байт)?
Да чё гадать? Надо посмотреть ассемблерный выхлоп, и всё станет ясно. Делов-то.

myst

Цитата: Алексей Гринь от июля  8, 2009, 11:12
GetTickCount
Ты в курсе, что её разрешение зависит от разрешения системного таймера? Какое оно в твоей системе?

Алексей Гринь

Цитата: myst от июля 10, 2009, 01:29
ЦитироватьGetTickCount
Ты в курсе, что её разрешение зависит от разрешения системного таймера? Какое оно в твоей системе?
Ёпрст. Если тест срабатывает при одном условии при запуске 100 раз *каждый раз* 5600 мс (плюс минут 3 мс), а при других условиях при запуске 100 раз — стабильно 6200 мс (плюсминус 3 мс)— это значит, что таймер тут ни при чём.

P.S. И вообще я тему блокировал, ты как суперадмин не замечаешь этого даже...
肏! Τίς πέπορδε;

myst

Цитата: Алексей Гринь от июля 10, 2009, 02:38
P.S. И вообще я тему блокировал, ты как суперадмин не замечаешь этого даже...
Упс... :-[