Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2010, 14:29   #21
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Кто это?? уж сколько раз слышу о нем, а кто это не могу понять...
Крис Касперски, он же KPNC, он же Nezumi, он же Мыщъх, он же N2k...
пыщь
JTG вне форума Ответить с цитированием
Старый 30.12.2010, 14:35   #22
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хы... Никогда бы не догадался что он выглядит, как эльф 80-го левела...
Ой, чет отвлеклись... Сорри за оффтоп, больше не буду.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.12.2010, 22:42   #23
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Будет ли программа со вторым вариантом реализации процедуры работать чуть-чуть быстрее, если MyProc использовать часто-часто-часто?
разницы не заметите.(добавится создание стекового фрейма, про него Виталий прав(ну про выделение 3*4байт в стеке) правда это в общем то sub esp,12)
пара команд асма лишь.(да и то не факт, многое зависит от компиля, если он всегда создает стековый фрейм то разницы вообще не будет)
но разница будет на деле, ибо первый вариант полностью готов к многопоточности.
(и кстати второй вариант чуть дольше запускается(ну там пара наносекунд на инициализацию лишних 12-ти байт bss секции)
Цитата:
И поскольку локальные переменки в стеке хранятся, для них будет выполняться команда смещения указателя стека.
стек(точнее активные страницы стека) приложения(работающего) обычно всегда находятся уже в памяти(благо call использует стек) и в итоге переменные тоже будут в памяти(ну так как они в стеке)
а глобальные могут вылететь из ОЗУ.
Цитата:
Почему? Это все из-за того, что локальные переменные в стеке, а к ним обращение быстрее идет (они в кэше)? А за глобальными переменными он в оперативку лазиет?
оптимизатор старается локальные переменки сувать сначало в регистры.
Цитата:
Использование Int64 привело к уравниванию скоростей.
оптимизатор не любит дробить переменные на части.(Int64 в регистр не влазит)
Цитата:
А вот Делфи юзает регистры где можно и где нельзя, и иногда получаются казусы, приходится оптимизатор лочить для некоего участка кода.
можно насчет нельзя подробнее?
а то уже не один миф об "кривом оптимизаторе" рассеивал.
Цитата:
Я для себя сделал 3 не хитрых вывода:
1. Экономно расходовать память на локальные переменные
2. По возможности разбивать тело процедур на части в которых стараться "повторно" использовать локальные переменные для новых нужд (это же позволит оптимизатору сработать лучше)
3. Использовать глобальные переменные для глобальных нужд, а не для временного хранения данных
ну первое спорно конечно, зависит от задачи, естественно не надо пихать в стек пару метров это да.

вообще это были игры с наносекундами, да и многое зависит от полевых условий.(таких как активность иных процессов(вытесняющих нас с ОЗУ и ядер), количества ОЗУ)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.01.2011, 12:05   #24
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
можно насчет нельзя подробнее?
Можно. Хотя это из разряда Секретных материалов, и вряд ли кто поверит пока сам не нарвется, были у меня пару случаев, когда цикл
Код:
for i:=1 to Сколько то там do...
Считал начиная не от единицы а от Сколько то там до единицы, уменьшая счетчик.
В некоторый момент цикла я из него выходил, и мне нужно было значение этого счетчика. Я получал не то что ожидал. Я погуглил, и мне поисковик обьяснил что
оптимизатор может рассмотреть в некоторых случаях цикл такого рода как
Код:
mov ecx, Сколько то там 
Метка:
 Действия
loop Метка
После отключения оптимизатора счетчик перестал помещаться в ECX, и шел в переменную как и полагается, а loop был заменен на cmp... Jxx с чем то, уже не помню точно с чем.

P.S. Если кому удастся смоделировать эту ситуацию принудительно просьба выложить код.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.01.2011, 12:14   #25
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Считал начиная не от единицы а от Сколько то там до единицы, уменьшая счетчик.
Подтверждаю, сам нарывался пару раз, причину так и не понял. Не помню или просто код чуть изменял, или убирал и повторно набирал - проблема исчезала. Кстати отладчик довольно часто так показывает, хотя по факту все нормально
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 01.01.2011, 12:49   #26
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
оптимизатор может рассмотреть в некоторых случаях цикл такого рода как
D6 нормально все было
видимо глюк при оптимизации работы с массивом, если не секрет какая версия Д?(хотя чтото вообще слышал что переменную цикла после цикла использовать считается небезопасно в Д)
вообще он старается заменить
Код:
<при итерации цикла>
mov ecx,<счетчик>
mov eax,<указатель на первый элемент массива>
lea eax,[eax+ecx*4];//это для массива Integer(где то вообще приходится через mul считать
<используем eax для доступа к элементу массива>
на
Код:
<инициализация цикла>
mov esi,<указатель на первый элемент>
<при при итерации цикла>
<используем esi для доступа к элементу массива>
add esi,4;//опять же массив сейчас из Integer(но тут легко на 20 поменять для массива структур какихнить)...это смещение указателя на следующий элемент массива
второе куда быстрее делается.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 01.01.2011, 12:58   #27
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
В некоторый момент цикла я из него выходил, и мне нужно было значение этого счетчика. Я получал не то что ожидал.
Так значение счёткика после цикла не определено - это не глюк, обычно в таком случае при компиляции warning должен быть. Если надо значение на момент выхода, то перед break надо его сохранить куда-нибудь в другое место, тогда должно быть нормально.
Somebody вне форума Ответить с цитированием
Старый 01.01.2011, 13:02   #28
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Если надо значение на момент выхода, то перед break надо его сохранить куда-нибудь в другое место, тогда должно быть нормально.
а точнее для этого цикл while идет
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Локальные переменные Sibedir Общие вопросы Delphi 30 24.12.2010 04:42
глобальные переменные ZuBy Общие вопросы Delphi 3 11.09.2010 14:17
Глобальные и локальные переменные Kapitann JavaScript, Ajax 2 03.08.2010 14:24
Си++.Глобальные,локальные параметры. Медина Помощь студентам 0 02.06.2009 21:51
Локальные и глобальные переменные. Proger10 Общие вопросы Delphi 1 04.05.2009 05:55