Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.03.21;
Скачать: CL | DM;

Вниз

Об оптимизации.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.011 c
1-66855
UnDISCOvery
2002-03-04 12:14
2002.03.21
Уважаемые ! Как побороть эффект


3-66803
EN
2002-02-23 01:42
2002.03.21
Администрирование БД IB


3-66783
andrey_m
2002-02-22 09:57
2002.03.21
Работа с MS SQL Server


3-66734
gegc
2002-02-20 09:37
2002.03.21
Как и чем создать DBF чтобы он открывался в экселе и аксесе И чтобы руссие буквы были похожи на русские буквы? (BDE не предлагать!)


1-66878
Vacheslav
2002-03-03 20:11
2002.03.21
Размеры компонентов