Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-66905
stikr
2002-03-06 10:33
2002.03.21
Можно ли перевести *.DFM (D6) в *.DFM (D5) ????


3-66774
amamed_3071
2002-02-21 14:57
2002.03.21
Как увеличит TimeOut в AdoConnection


3-66749
DimDim
2002-02-20 16:53
2002.03.21
Интернет база MySQL + Delphi 5


3-66737
dmitriyk
2002-02-19 03:29
2002.03.21
Неужели никто не встречал TDBGrid, у которого можно было бы вставить картинку.


1-66936
Man-In-Red
2002-03-06 21:51
2002.03.21
Как в label2 вставить текст с Label1 до слова ‘Конец’, а в Label3 после этого слова?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский