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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2016, 21:41   #11
Turbine
Пользователь
 
Регистрация: 13.08.2008
Сообщений: 76
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Поможет не перезагрузка, а разбор полетов работы с памятью. Вы её где-то загадили самую малость. Вот ваша проблема.
Спасибо!
Прежде чем начинать замену фрагментов кода на ассемблерные вставки, обычно проверяю отсутствия утечек памяти в программе иначе вообще концов не найдешь. А загажено было сторонним приложением.
Turbine вне форума Ответить с цитированием
Старый 21.09.2016, 21:45   #12
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Поделись, какого эффекта добился точечными asm-вставками. Скажем работало минуту, стало секунду. Или вместо пары секунд стало три секунды. Или там все измеряется сотней микросекунд на час работы?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.09.2016, 02:47   #13
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,859
По умолчанию

Цитата:
Сообщение от Turbine Посмотреть сообщение
Спешу поделиться тем, что выяснена и причина глюка. На момент компиляции из 24 ГБ памяти было занято около 18. Причем не игрушками, а обработкой данных. Естественно, перезапуск IDE ничего не давал. Она периодически преподносит чудеса, будучи за пределами 32битных адресов. Лично для себя придется это запомнить РАЗ И НАВСЕГДА. Как всегда помогла перезагрузка.
"Садись - два"!
Ну по крайней мере три с минусом.
Ни черта ты не понял ни о сути сообщения об Access Violation, ни о причинах выдачи сего сообщения, ни об ошибке в твоей программе.
northener вне форума Ответить с цитированием
Старый 22.09.2016, 10:39   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Ни черта ты не понял ни о сути сообщения об Access Violation, ни о причинах выдачи сего сообщения, ни об ошибке в твоей программе.
Простите, а откуда взялась информация про Access Violation ?
Вроде бы у TC я такого не видел?

Хотя, конечно, неверная работа кода на ассемблере из-за перегруженной памяти - это что-то неизведанное (для меня )
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.09.2016, 10:43   #15
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

одна из прошлых тем
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 22.09.2016, 11:07   #16
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
одна из прошлых тем
а, я что-то интересное пропустил?...

ОК. Спасибо за ответ.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.09.2016, 14:52   #17
Turbine
Пользователь
 
Регистрация: 13.08.2008
Сообщений: 76
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
"Садись - два"!
Ну по крайней мере три с минусом.
Ни черта ты не понял ни о сути сообщения об Access Violation, ни о причинах выдачи сего сообщения, ни об ошибке в твоей программе.
Никаких Access Violation, Memory Leaks не было.
Turbine вне форума Ответить с цитированием
Старый 22.09.2016, 14:58   #18
Turbine
Пользователь
 
Регистрация: 13.08.2008
Сообщений: 76
По умолчанию

Восстановим сюжетную линию:
1. При хорошо забитой памяти - Delphi (32 битный) бултыхался в адресах свыше 7 ГБ и компилятор генерил чушь.
2. После перезагрузке - Delphi (32 битный) был загружен в адреса 32-битного пространства и уже компилировал то, что от него требовалось правильно.
Turbine вне форума Ответить с цитированием
Старый 22.09.2016, 15:05   #19
Turbine
Пользователь
 
Регистрация: 13.08.2008
Сообщений: 76
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Поделись, какого эффекта добился точечными asm-вставками. Скажем работало минуту, стало секунду. Или вместо пары секунд стало три секунды. Или там все измеряется сотней микросекунд на час работы?
В частности процедура, которая обсуждается в этой теме быстрее примерно в 2 раза, чем обычный код.

Поэтому процедуры, которые вызываются в циклах десятки или сотни тысячи раз, можно попробовать заменить вставками. Особенно когда битовые операции. Бывают и обломы - ассемблерный аналог ничуть не быстрее оригинала, пусть и короче в коде, а время на написание потрачено.

С одной стороны это кажется чушью - добиваешься быстроты кода, а время работы VCL-компонентов (например вывод в memo) все это множит на ноль, но... Остается код на asm, который прекрасно может пригодиться в консольной версии, например.

Последний раз редактировалось Turbine; 22.09.2016 в 15:20.
Turbine вне форума Ответить с цитированием
Старый 23.09.2016, 08:46   #20
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Цитата:
Сообщение от Turbine Посмотреть сообщение
В частности процедура, которая обсуждается в этой теме быстрее примерно в 2 раза, чем обычный код.
Стесняюсь спросить... Каким образом код из шапки, который очень мягко говоря "странный", может быть быстрее в два раза? Более того, как он вообще может работать?

Если я все правильно понимаю, изначальная задача звучит как:
Цитата:
Сообщение от Turbine
скопировать 0-3 биты из одного байта в 7-4 биты другого
Непонятно только одно, нужно ли в переменной приемнике сохранять младшие разряды? И не понятно зачем городить сложности там, где достаточно обычного сдвига?

Код:
var a,b: byte;
...
a:=10;
b:=a shl 4; //можно писать b:=a*16, при константном уможении на степень двойки компилятор и так будет использовать сдвиг
Если нужно сохранить младшие биты в приемнике:
Код:
a:=10;
b:=8;
b:=(a shl 4) or (b and $f);
Приплетать сюда asm не имеет смысла, т.к. ускорять нечего, это элементарные операции.
x128 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод графики встроенный ассемблер Free Pascal иванлеон Помощь студентам 0 26.04.2012 14:00
Делфи 7 - Встроенный ассемблер Katus Помощь студентам 2 05.02.2012 00:19
скрол браузера сдвигает контент Anait HTML и CSS 0 06.05.2010 12:12
Ковертирование из png 24 бит в png 8 бит isat Общие вопросы .NET 0 22.03.2010 13:38