Форум: "Потрепаться";
Текущий архив: 2002.03.21;
Скачать: [xml.tar.bz2];
ВнизОб оптимизации. Найти похожие ветки
← →
McSimm (2002-02-06 10:21) [0]Иссяк источник задачек в глубинах памяти. (Во какой слог!)
Предлагаю вашему вниманию собственную хитрую задачку.
Программисты! Все мы (или почти) наблюдали действие оптимизатора при отладке программ.
А может ли включение оптимизации (конкретно - Delphi) повлиять каким-либо образом на результаты работы программы?
Предлагаю задание. Требуется написать (и проверить) функцию:
function OptimizationFounded: Boolean;
такую, чтобы вернула True если программа компилировалась со включенным оптизатором. И, соответственно, False - в противном случае.
Возможно ли такое средствами Делфи?
--
С уважением,
McSimm
P.S. Если кто-то сходу найдет решение, просьба не кидать в первые же минуты. Дайте возможность остальным подумать.
← →
Алексей Петров (2002-02-06 10:24) [1]
function OptimizationFounded: Boolean;
begin
{$IFOPT O+}
Result := true
{$ELSE}
Result := false
end;
← →
McSimm (2002-02-06 10:40) [2]Надо было попросить "в первые же четыре минуты"
:)
← →
Алексей Петров (2002-02-06 10:44) [3]Пусть думают - в моем коде есть ошибки :)
← →
panov (2002-02-06 10:52) [4]Хитрые!:-)
А вы напишите функцию, которая действительно возвратит разный результат при выполнении каких-либо операций, а не в результате использования директив компилятора.
← →
VuDZ (2002-02-06 11:16) [5]а не проще ли поискать список глюков оптимизатора и по ним риентироваться?
← →
McSimm (2002-02-06 11:30) [6]>Алексей Петров © (06.02.02 10:44)
>Пусть думают - в моем коде есть ошибки :)
Ошибка есть, но это не принципиально. Вопрос был построен специально, чтобы пустить по ложному пути, при этом не обманывая.
Мой любимый тип задач. На нестандартность мышления.
>panov © (06.02.02 10:52)
Надеюсь, что такой путь все-таки бесперспективен. Возможно, асы могут ассемблерными инструкциями распознать различие, но это совсем другой путь
>VuDZ © (06.02.02 11:16)
Проще? Неужели может быть проще?
← →
Алексей Петров (2002-02-06 11:49) [7]> McSimm © (06.02.02 11:30)
> Надеюсь, что такой путь все-таки бесперспективен.
Готов "на спор" написать такой код :)
К стати ассемблерные инструкции не оптимизируются а включаются "как есть."
← →
McSimm (2002-02-06 11:54) [8]>ассемблерные инструкции не оптимизируются
А без них сможешь? Используя только паскаль?
← →
Алексей Петров (2002-02-06 12:08) [9]Чистый паскаль? Как это слово будем понимать?
Весь ObjectPascal кроме слова asm? ОК?
← →
Алексей Петров (2002-02-06 12:16) [10]А не сложнее получилось :)
function OptimizationFounded: Boolean;
begin
Result := PChar(@OptimizationFounded)^<>#$55;
end;
Просто для примитивных функций оптимизатор выкидывает стековый кадр, который начинается с
push ebp = $55
А для не оптимизированных - такой байт в начале кода есть.
← →
McSimm (2002-02-06 12:20) [11]Да. 5 баллов!
Съел ты меня. Надо было с этого и начинать :)
← →
MBo (2002-02-06 12:43) [12]>стековый кадр, который начинается
где бы почитать про такие тонкости реализации?
в хелпе только и есть, что "оптимизатор однако крутой и безопасный"
т.е. литература хотя бы вроде той, что была для TPascal "Programmers Guide"
← →
Алексей Петров (2002-02-06 12:45) [13]> MBo © (06.02.02 12:43)
Встаешь на Breakpoint-е и смотришь CPU-window - там вся информация :)
← →
MBo (2002-02-06 12:50) [14]это-то ясно. заранее бы подковаться.
← →
McSimm (2002-02-06 13:02) [15]Я надеялся что мараторий на ассемблер не даст возможности доступа к регистрам и возможности получить подобной информации.
Но Алексей и тут всех обошел :)
← →
Алексей Петров (2002-02-06 13:04) [16]Так я регистры и не трогал. Я просто простейший анализ машинного кода провел. :)
← →
VuDZ (2002-02-06 14:21) [17]2McSimm
Я надеялся что мараторий на ассемблер не даст возможности доступа к регистрам и возможности получить подобной информации.
??? а при чём тут регистры проца ???
>VuDZ © (06.02.02 11:16)
Проще? Неужели может быть проще?
да, но для С++, так как у него слишком агрессивные оптимизаторы и иногда случаются глюки... По этому поводу в инете немерено статей...
ЗЫ если не секрет, то какой смысл в определение оптимизации?
← →
Алексей Петров (2002-02-06 14:25) [18]> VuDZ © (06.02.02 14:21)
> да, но для С++, так как у него слишком агрессивные оптимизаторы и иногда случаются глюки... По этому поводу в инете немерено статей...
За Delphi-йским такого не замечено. А твое утверждение не корректно. Говорить можно о конкретном компиляторе а не о языке С++. Т.к. компиляторов этих десятки.
> ЗЫ если не секрет, то какой смысл в определени и оптимизации.
Интерес чисто академический. Практической пользы, ИМХО, нет.
← →
McSimm (2002-02-06 14:36) [19]>??? а при чём тут регистры проца ???
Например: посмотреть значение for-переменной после его выполнения, или стек просмотреть.
Но Алексею для этого и регистры не понадобились
>ЗЫ если не секрет, то какой смысл в определение оптимизации?
Никакого.
← →
VuDZ (2002-02-06 14:40) [20]Алексей Петров
Говорить можно о конкретном компиляторе а не о языке С++. Т.к. компиляторов этих десятки.
я и подразумевал компилятор, а не язык :D
через мои руки прошла куча компилеров, среди них: MS VC++ (cl), intel C Compiler, gcc - в последнем меньше всех багов, но ошибки есть к _каждом_ компиляторе С++ из-за его чертовской сложности, в основном при работе с шаблонами и множесвенным наследование (иногда это не ошибки, а не строгое следование букве стандарта)
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.03.21;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c