Форум программистов, компьютерный форум, киберфорум
C (Си)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для voraa
1284 / 1250 / 186
Регистрация: 21.01.2024
Сообщений: 5,752

Трансляция с оптимизацией

28.12.2024, 10:03. Показов 3850. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проблема такая.
Есть очень старый говнокод (мой). Это cgi программа, которая долгие годы успешно работала на сервере под 32 разрядным линухом. Тут появилась необходимость перекомпилить ее под 64-х разрядный линух.
Вроде справился (Линух - убунта, транслирую стандартным gcc) - все работает.
Но когда я, ради интереса, попробовал откомпилить ее с ключом -Ofast, она работать перестала. Некоторые запросы проходят успешно, но некоторые нет (программа просто слетает). Я пока не пробовал ее отлаживать (CGI программы не так просто - только выдачей в лог), но просто хотелось бы понять, куда смотреть в первую очередь. Какие засады могут быть при оптимизации?
В винде, при использовании транслятора MinGW gcc точно такая же проблема.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.12.2024, 10:03
Ответы с готовыми решениями:

Проблемы с оптимизацией
Добрый день. Совсем недавно начал осваивать VBA в Excel, но не получается уменьшить код. Приведу его кусок, я думаю, что он может быть...

Помогите с оптимизацией
Подскажи плиз с сайтом _www.atis-ars.ru. Сейчас сайт по словосочитанию "охрана труда" находится на 10 месте в яндексе, что надо...

Помогите с оптимизацией
Средства на ссылки, контекст рек-му, статьи и etc.. есть. Помогите с оптимизацией http://***.biz/ ЗЫ: буду рад любой критике и советам!...

11
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
28.12.2024, 11:20
Цитата Сообщение от voraa Посмотреть сообщение
куда смотреть в первую очередь. Какие засады могут быть при оптимизации?
В код. 146% - причина в неиницализированных переменных
0
 Аватар для voraa
1284 / 1250 / 186
Регистрация: 21.01.2024
Сообщений: 5,752
28.12.2024, 11:53  [ТС]
Цитата Сообщение от Azathtot Посмотреть сообщение
146% - причина в неиницализированных переменных
Не очень понятно.
Если я обращаюсь к неинициализированной переменной, то и без оптимизации я получу какое то случайное значение и неверный результат (даже без падения программы)
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
28.12.2024, 11:56
Цитата Сообщение от voraa Посмотреть сообщение
то и без оптимизации я получу какое то случайное значение и неверный результат
А вот не факт. Без оптимизации компилятор может инициализировать все переменные нулями.
т.е.
C++
1
2
3
4
some_type *ptr;
// Тут много кода
if(!ptr) ptr = build_new_object();
// работаем с объектом
Может вполне себе работать
0
 Аватар для voraa
1284 / 1250 / 186
Регистрация: 21.01.2024
Сообщений: 5,752
28.12.2024, 12:02  [ТС]
Цитата Сообщение от Azathtot Посмотреть сообщение
Без оптимизации компилятор может инициализировать все переменные нулями.
Чего то я не слышал, что бы обычный malloc что то заполнял нулями.

Добавлено через 1 минуту
Да и в стеке вроде только отводится память, но ничем не заполняется.
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
28.12.2024, 12:05
Цитата Сообщение от voraa Посмотреть сообщение
Чего то я не слышал, что бы обычный malloc что то заполнял нулями.
А при чем тут malloc? Объявление указтеля не есть аллокирование памяти. Он на стеке себе живет. На тему "не заполняется" нет ничего проще. Собирайте с отладкой и смотрите.
А вот без отладки и с оптимизацией, да, тут очень могут быть "сюрпризы".
0
 Аватар для Pphantom
2319 / 1561 / 721
Регистрация: 17.03.2022
Сообщений: 5,031
28.12.2024, 12:52
Цитата Сообщение от voraa Посмотреть сообщение
Но когда я, ради интереса, попробовал откомпилить ее с ключом -Ofast, она работать перестала.
Ну так ведь это же агрессивная оптимизация без гарантии корректности (например, если у вас там есть вычисления с плавающей точкой, то могут вылезать неправильные округления). Так что теоретически с ней любой код может потерять работоспособность, даже вполне нормальный.

-O3 почему-то не хватает?
0
 Аватар для voraa
1284 / 1250 / 186
Регистрация: 21.01.2024
Сообщений: 5,752
28.12.2024, 14:46  [ТС]
Цитата Сообщение от Azathtot Посмотреть сообщение
146% - причина в неиницализированных переменных
А ты был прав.
Ошибка была типа
C
1
2
3
4
5
6
7
8
9
int k;
....
if (что то) {
....
    k = 42;
....
}
....
m = k;
Когда условие не выполнялось, то k неинициализировано.

Вопрос только, как оно без оптимизации работало?
0
 Аватар для Azathtot
754 / 351 / 90
Регистрация: 07.01.2023
Сообщений: 1,451
28.12.2024, 20:06
Цитата Сообщение от voraa Посмотреть сообщение
Вопрос только, как оно без оптимизации работало?
а без оптимизации k == 0 было
0
 Аватар для voraa
1284 / 1250 / 186
Регистрация: 21.01.2024
Сообщений: 5,752
28.12.2024, 20:16  [ТС]
Цитата Сообщение от Azathtot Посмотреть сообщение
а без оптимизации k == 0 было
Нет. Наоборот, какое то довольно большое случайное число.
Там дальше некий цикл, который завершался по другим нормальным условиям до достижения k. А с оптимизацией k оказывалось маленьким и цикл завершался ненормально раньше времени.
Самое удивительное, что существующая CGI программа, где это не исправлено совершенно корректно работает на сервере.
0
Эксперт .NET
 Аватар для Rius
13153 / 7711 / 1679
Регистрация: 25.05.2015
Сообщений: 23,503
Записей в блоге: 14
28.12.2024, 20:35
Это не удивительно, а совпадение / везение.
Можете воспользоваться статическими анализаторами и ещё найти места.
0
 Аватар для voraa
1284 / 1250 / 186
Регистрация: 21.01.2024
Сообщений: 5,752
28.12.2024, 21:21  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Можете воспользоваться статическими анализаторами и ещё найти места.
Ну просматриваю похожие куски.
Я код этой программы последний раз смотрел (и даже правил что то) в 2014г. А написано это было изначально в 2006. И с тех пор работает. И на виндусовом сервере стояла и на линуксовых.
Потом кто то еще что то там еще добавлял. Но долго не могли найти исходники тех правок.

Добавлено через 28 минут
Цитата Сообщение от Pphantom Посмотреть сообщение
-O3 почему-то не хватает?
Ну это просто эксперимент был (который помог баг найти).
На самом деле и без оптимизации все работает нормально. 0.8 с на запрос с большим количеством найденных данных, 0.1с на небольшое количество. Пересылка ответа по сети занимает больше времени.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.12.2024, 21:21
Помогаю со студенческими работами здесь

Помогите с оптимизацией!
Ребята, может кто сможет по -доброте душевной помочь с оптимизацией сайта? :) Сама я черепашечьими шагами стремлюсь к этому-...

Помогите с оптимизацией
Доброго времени суток. у меня сайт pornstardata.ru(для взрослых, кому меньше 18 даже не смотрите). вроде бы под поисковики оптимизировал,...

Помогите с оптимизацией
Есть сайт pcinfoportal.net.ru Помогите прооптимизировать его под поисковики. Что надо еще сделать. Подскажите.

Посоветуйте с оптимизацией
Занимаюсь оптимизацей гдет 1,5 года, хочу посоаветоваться емет ли смысл продвигать сайт не используя Ссылочное Ранжирование, а просто...

Помогите с оптимизацией
Написал вручную index.php, очень нужна оценка и какие-нить советы. Заранее спасибо! Файл вложил)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru