Форум: "Основная";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
ВнизОшибка при вызове ReallocMem в ассемблере Найти похожие ветки
← →
Defunct © (2005-08-02 10:56) [40]TProgrammer (02.08.05 02:04) [39]
> Потому как половина функций из модуля SysUtils, используют в ассемблерных вставках вызовы дельфийских функций.
Правда? А с каких это пор модуль SysUtils стал входить в состав VCL? И второе попробуй найди в модуле SysUtils хотя бы один вызов delphiшной функции, а не ассемблерной вставки.
> На ночь не перечитываешь ?
нет, просто злопамятный.
← →
TProgrammer (2005-08-02 11:54) [41]
Правда? А с каких это пор модуль SysUtils стал входить в состав VCL?
Согласен, описался, не VCL - а RTL. Это что-то меняет ?
И второе попробуй найди в модуле SysUtils хотя бы один вызов delphiшной функции, а не ассемблерной вставки.
Легко. Например функция FormatBuf вызывает дельфийскую FormatError.
← →
Defunct © (2005-08-02 12:06) [42]TProgrammer (02.08.05 11:54) [41]
> Это что-то меняет ?
Да разумеется, фактически полностью отменяет твое предыдущее высказывание:
> И пойди расскажи свои прописные истины программистам Borland"a, которые к твоим "истинам" не особо не прислушивались когда писали VCL.
> Например функция FormatBuf вызывает дельфийскую FormatError.
Частный случай, где не требуется высокая скорость. Причем на поиски которого у тебя ушел почти час ;>
← →
TProgrammer (2005-08-02 14:53) [43]
> > И пойди расскажи свои прописные истины программистам Borland"a,
> которые к твоим "истинам" не особо не прислушивались когда
> писали VCL.
Ок. Тогда пойди расскажи свои прописные истины тем программистам Borland"a, которые к твоим "истинам" не особо не прислушивались когда писали RTL.
> Частный случай, где не требуется высокая скорость. Причем
> на поиски которого у тебя ушел почти час
Частный ? Это первое что бросилось в глаза в течении 1 минуты. Не нравиться SysUtils - открой System - там полно вызовов именно GetMem / ReallocMem на которые ты наехал, базируясь на своих "прописных истинах".
p.s. Насчет часа поисков - это ты телепатией определил ? Или ты думаешь, что мне больше делать нечего как только в форуме сидеть ?
← →
Defunct © (2005-08-02 15:31) [44]TProgrammer (02.08.05 14:53) [43]
> Тогда пойди расскажи свои прописные истины тем программистам Borland"a,
RTL, в частности System и SysUtils годами не модифицировались. И код в них мягко сказать "подгулявший". Не думаю что borland"овцам надо что-то пояснять, они и так это прекрасно знают. Только пользуются еще одной прописной истиной - "лучшее враг хорошего"/"не сломалось - не чини".
> Частный ? Это первое что бросилось в глаза в течении 1 минуты.
Первое что попалось на глаза после долгих поисков, будет справедливее сказано.
> Не нравиться SysUtils - открой System - там полно вызовов именно GetMem / ReallocMem на которые ты наехал, базируясь на своих "прописных истинах
Не полно, а всего 1 на два приведенных тобой модуля:
в System - 1 вызов, в SysUtils - 0.
от того, что этот один вызов имеет место в модуле System (сделанный кстати не от хорошей жизни, а от того что в System аж 4 разных ReallocMem), совсем не значит что надо так делать.
> p.s. Насчет часа поисков - это ты телепатией определил ?
интуиция + логика меня редко подводят, можешь называть это телепатией.
← →
TProgrammer (2005-08-02 15:48) [45]
> RTL, в частности System и SysUtils годами не модифицировались.
Эта типа шутка такая ? Если нет - то пойди сравни код System от версии к версии изменяется очень сильно.
> Первое что попалось на глаза после долгих поисков, будет
> справедливее сказано.
Опять ИМХО забываешь ставить - телепат из тебя никакой, прими это к сведению.
> Не полно, а всего 1 на два приведенных тобой модуля:
> в System - 1 вызов, в SysUtils - 0.
Интересные у тебя модули, у меня в D6 в System 4 вызова GetMem бросились в глаза сразу, считать полное количество мне совсем не хочеться.
> (сделанный кстати не от хорошей жизни, а от того что в System
> аж 4 разных ReallocMem), совсем не значит что надо так делать.
>
И совсем не значит, что так делать нельзя - и это плохой стиль.
> интуиция + логика меня редко подводят, можешь называть это
> телепатией.
Интуиция и логика у тебя хреновые, если думаешь, что искать ассемблерный вызов в модуле занимает час.
← →
Defunct © (2005-08-02 16:14) [46]> Если нет - то пойди сравни код System от версии к версии изменяется очень сильно.
Ты же моим словам все равно не веришь. Для чего же предлагаешь мне сравнивать?
Если хочешь убедиться - интереснейшую затею по сравнению кода сделай сам, не получится тогда обращайся за помощью. Кстати, при сравнении ты заметишь как от более ранних версий к более поздним количество вызовов (да и самих асм вставок) уменьшалось.
> Опять ИМХО забываешь ставить - телепат из тебя никакой, прими это к сведению.
Нет повода верить твоим отмазкам.
> Интересные у тебя модули,
стандартные модули. Ты читай внимательней, говорил я про ReallocMem, GetMem не надо приплетат, о нем другой разговор.
> И совсем не значит, что так делать нельзя
Приведи хотя бы одну мою цитату, где я говорил, что так делать нельзя. Привести ты ее не сможешь, поэтому иногда лучше жевать.
> Интуиция и логика у тебя хреновые, если думаешь, что искать ассемблерный вызов в модуле занимает час.
я очень рад за тебя, что ты на решение этой задачи потратил меньше часа. Налицо прогресс.
← →
TProgrammer (2005-08-02 16:45) [47]
> Ты же моим словам все равно не веришь. Для чего же предлагаешь
> мне сравнивать?
Ты же моим словам не веришь - вот и предлагаю убедиться тебе самому.
> при сравнении ты заметишь как от более ранних версий к более
> поздним количество вызовов (да и самих асм вставок) уменьшалось.
Ну учитывая, что System дельфи 3 был практически полностью написан на ассемблере, трудно возразить. Количество вызов же уменьшалось исключительно пропорционально количеству асм вставок и не более того. Но речь не идет о том использовать асм или нет, а о том, что ты утверждаешь, что использование вызовов дельфийских функций из асма - плохой тон.
> стандартные модули. Ты читай внимательней, говорил я про
> ReallocMem, GetMem не надо приплетат, о нем другой разговор.
Другой разговор ? То есть его вызывать можно, а другие функции нельзя ? Интересная и удобная логика.
> Нет повода верить твоим отмазкам.
Мне вообще плевать во что ты там веришь. Твои отмазки ничуть не лучше.
> Приведи хотя бы одну мою цитату, где я говорил, что так
> делать нельзя. Привести ты ее не сможешь, поэтому иногда
> лучше жевать.
Лучше тебе тоже пожевать, чем цитировать фразы не до конца.
> я очень рад за тебя, что ты на решение этой задачи потратил
> меньше часа. Налицо прогресс.
Налицо тут только твой примитивный и убогий сарказм.
← →
Mx © (2005-08-02 16:55) [48]Мда... Когда начнем сиськи обсуждать?
← →
Defunct © (2005-08-02 21:21) [49]Mx © (02.08.05 16:55) [48]
Если вдруг TProgrammer скажет, что у него классные сиськи, так и начнем их обсуждать, пока он такой возможности мне не предоставил :)
А вообще TProgrammer - "классный пацан" (C) Сара Коннор, нравится мне его манера ответов, вижу в нем свое зеркальное отражение.
TProgrammer (02.08.05 16:45) [47]
Но речь не идет о том использовать асм или нет, а о том, что ты утверждаешь, что использование вызовов дельфийских функций из асма - плохой тон.
Да утверждаю, и ты даже вроде как согласился в [45]. Если же нет, тогда у тебя есть ошибки стилистики. (пиши грамотней)
> чем цитировать фразы не до конца.
Твоя мысль там процитирована ровно настолько насколько я ее понял по расставленным тобой знакам препинания.
> Налицо тут только твой примитивный и убогий сарказм.
Вовсе нет, я правда рад, что человек, два месяца назад неумевший нормально создать форму, уже умеет читать асм код. Искрене за тебя рад.
← →
TProgrammer (2005-08-02 22:14) [50]
> Да утверждаю, и ты даже вроде как согласился в [45]. Если
> же нет, тогда у тебя есть ошибки стилистики. (пиши грамотней)
Это у тебя ошибки понимания (учись логике)
Мое мнение - я считаю, что применение ассемблера вообще не слишком оправдано, особенно в свете постепенного продвижения идеи мультиплатформенности в т.ч. и Borland"ом. Но если уж идет применение asm вставок, то вызов из них дельфийских функций, в особенности функций MemoryMenager"а.
> Твоя мысль там процитирована ровно настолько насколько я
> ее понял по расставленным тобой знакам препинания.
Еще одно непонимание.
> Вовсе нет, я правда рад, что человек, два месяца назад неумевший
> нормально создать форму, уже умеет читать асм код.
Я тебе по секрету скажу - я его еще и писать умею. А ты так до сих пор и не въехал в проблему 2-х месячной давности - сказать тут больше нечего.
> Искрене за тебя рад.
Взаимно.
← →
Mx © (2005-08-02 22:33) [51]Гы, прикольно, продолжайте в том же духе! Вот же до чего доводит ошибка в маленькой ассемблерной вставке :)
← →
Defunct © (2005-08-02 22:34) [52]> Это у тебя ошибки понимания (учись логике)
Которой логике? Если ты пишешь неграмотно.
"Казнить, нельзя помиловать."
"Казнить нельзя, помиловать."
прочитай теперь свое произведение [45].
> И совсем не значит, что так делать нельзя - и это плохой стиль.
> Еще одно непонимание.
Проблема объясняющего.
>> два месяца назад неумевший нормально создать форму, уже умеет читать асм код.
> Я тебе по секрету скажу - я его еще и писать умею.
голословное утверждение. Тебе что-то сказать - что в лужу плюнуть.
> А ты так до сих пор и не въехал в проблему 2-х месячной давности - сказать тут больше нечего.
Проблема была твоя, причем надуманная. Я же не обязан помнить твои надуманные проблемы по два месяца. Других более важных дел хватает.
← →
TProgrammer (2005-08-02 23:07) [53]
> Проблема объясняющего.
Твое непонимание - не моя проблема.
> Тебе что-то сказать - что в лужу плюнуть.
Мне твое мнение как-то вообще пофигу.
> Проблема была твоя, причем надуманная. Я же не обязан помнить
> твои надуманные проблемы по два месяца. Других более важных
> дел хватает.
Сам себе противоречишь. Ты первый об этом вспомнил. На кой вспоминаешь то, что не помнишь и не понял ?
← →
Defunct © (2005-08-02 23:12) [54]> Мое мнение - я считаю, что применение ассемблера вообще не слишком оправдано, особенно в свете постепенного продвижения идеи мультиплатформенности в т.ч. и Borland"ом.
смотря для каких задач. Кто-то же пишет ОС и не под каждую платформу можно найти такую ОС как нужно по приемлемой цене.
Но если уж идет применение asm вставок, то вызов из них дельфийских функций, в особенности функций MemoryMenager"а.
1. MemoryManager.
2. Ты не закончил свою мысль. (то ли вызов функций MM оправдан, то ли наоборот). При этом ты говоришь о самом MM так, как-будто он написан на Delphi. Загляни в ту же реализацию ReallocMem;external;cdecl и _ReallocMem().
← →
Defunct © (2005-08-02 23:24) [55]> Твое непонимание - не моя проблема.
В этом случае только твоя.
Если бы я лез к тебе с вопросам, тогда это мое непонимание. А если ты пишешь о чем-то неоднозначно, то это уже только твоя проблема.
> Мне твое мнение как-то вообще пофигу.
так зачем тогда споришь?
> На кой вспоминаешь то
чтобы испортить тебе настроение.
← →
TProgrammer (2005-08-02 23:36) [56]
> В этом случае только твоя.
А я и не знал, что у меня есть проблема с твоим пониманием, спасибо, что просветил.
> так зачем тогда споришь?
Чтобы другие не воспринимали тебя всерьез.
> чтобы испортить тебе настроение.
Чтобы испортить мне настроение нужно больше, чем один неудачный клоун. Меня все это просто развлекает - это вторая причина, почему я спорю :)
← →
TProgrammer (2005-08-02 23:41) [57]
> смотря для каких задач. Кто-то же пишет ОС и не под каждую
> платформу можно найти такую ОС как нужно по приемлемой цене.
Кто-то пишет ОС на Delphi ? Или мы уже говорим о всех языках программирования ?
> Ты не закончил свою мысль.
Упс. Заканчиваю - вызовы MM оправданы, равно как и вызовы чисто дельфийских процедур.
> Загляни в ту же реализацию ReallocMem
Однако ты прицепился именно к ReallocMem.
← →
Mx © (2005-08-02 23:57) [58]
> TProgrammer (02.08.05 23:41) [57]
> Однако ты прицепился именно к ReallocMem.
Ну это хотя бы по теме :)
> Defunct © (02.08.05 23:12) [54]
> При этом ты говоришь о самом MM так, как-будто
> он написан на Delphi
Стоп. А если заглянуть в GetMem.inc?
← →
Defunct © (2005-08-02 23:59) [59]> А я и не знал, что у меня есть проблема с твоим пониманием, спасибо, что просветил.
У тебя проблема с изложением мысли, а не с моим пониманием.
> Чтобы другие не воспринимали тебя всерьез.
:)
> Чтобы испортить мне настроение нужно больше, чем один неудачный клоун. Меня все это просто развлекает - это вторая причина, почему я спорю :)
Представляешь, это и моя причина по которой я с тобой общаюсь ;)
> Кто-то пишет ОС на Delphi ? Или мы уже говорим о всех языках программирования ?
Уже об асм(ах) как таковых.
> Упс. Заканчиваю - вызовы MM оправданы, равно как и вызовы чисто дельфийских процедур.
На что идет вполне обоснованная желание взглянуть на твой код, где ты выполняешь такие оправданные вызовы, чисто делфишных процедур. Приведешь или у тебя нечего привести? Приведи хотя бы ради того чтобы тебя всерьез воспринимали.
> Однако ты прицепился именно к ReallocMem.
см [32].
← →
Defunct © (2005-08-03 00:07) [60]Mx © (02.08.05 23:57) [58]
> Стоп. А если заглянуть в GetMem.inc?
Половина функций kernel все остальное на Delphi. Кстати, хороший пример, ни одной асмовской вставки и ни одного вызова Delphiшной процедуры из асм вставки.
← →
TProgrammer (2005-08-03 00:18) [61]
> Уже об асм(ах) как таковых.
Видимо это ты говоришь об асмах. Я же продолжаю говорить о делфи и асмовких вставках в дельфийском коде.
> На что идет вполне обоснованная желание взглянуть на твой
> код, где ты выполняешь такие оправданные вызовы, чисто делфишных
> процедур. Приведешь или у тебя нечего привести?
Я пропустил то место где я утверждал, что я это применяю ? Мне подобные конструкции нужны не были, но если бы понадобились, то применил бы. Зато я тебе привел примеры применения этого в коде RTL.
> см [32].
См. модуль System. Или ему тоже грош цена. Ты видимо считаешь, что написал бы лучше.
← →
Mx © (2005-08-03 00:41) [62]
> Defunct © (03.08.05 00:07) [60]
> Половина функций kernel все остальное на Delphi
Это не говорит о том, что MM написан не на Delphi. Да, он юзает ядро, но! Во-первых, а как иначе в защищенной ОС? Во-вторых, по такой логике ВСЕ проги под Windows написаны на C.
> ни одной асмовской вставки
Послушай, я использовал ассемблер только с целью избежать различных shl/shr, так как там много всякой фигни. Доступ к биту думаю проще реализовать в виде простой BT, чем в виде Result := (N and M = M), где M еще надо подсчитать. Память я никак не смогу выделить на "чистом" ассемблере, к тому же вызов ReallocMem впоследствии производился по-условию.
← →
Defunct © (2005-08-03 00:58) [63]> Видимо это ты говоришь об асмах. Я же продолжаю говорить о делфи и асмовких вставках в дельфийском коде.
Понимаешь ли, когда ты заговорил о многоплатформенности, мне ничего не оставалось как говорить об асм(ах) вообще. Хочешь говорить о вставках - не вопрос, но тогда мы не выходим за рамки IA32/Win32/Delphi
> Я пропустил то место где я утверждал, что я это применяю ?
Ты нигде не говорил, что применяешь, то что приветствуешь и оправдываешь. Я сделал такой вывод лишь потому, что:
1. Чел оспаривает [32].
2. Чел говорит, что пишет на асме.
3. Чел говорит, что вызовы Delphiшных функций из асм вставок оправданы.
Логично предположить раз он так уверенно об этом говорит, значит он "собаку съел" в этом вопросе. Следовательно у него есть примеры, собственного кода, где без таких вызовов либо нельзя было обойтись, либо отказ от таких вызовов значительно усложнил бы код.
> Мне подобные конструкции нужны не были, но если бы понадобились, то применил бы.
Слишком много "бы". Я же в отличие от тебя имел дело с такими "конструкциями", и зачастую они ни к чему хорошему не приводят. Ни выигрыша в производительности, ни экономии времени при написании программы, лиш только добавляют сложности и глюков при модификации программы. Поэтому я утверждаю [32].
> Зато я тебе привел примеры применения этого в коде RTL.
RTL это не показатель. Это написанная библиотека сотнями разных программистов, которые дописывали определенные куски в разное время. Кому-то было удобнее сделать вызов в асм вставке, кому-то - написать на Delphi, в итоге получилось то, что есть. Главное что оно работает, поэтому его и не трогают.
> См. модуль System. Или ему тоже грош цена.
Да - написан кривовато, да - не подходит в качестве эталона для программистов. Но он работает, отлажен и вылизан в этом его ценность.
> Ты видимо считаешь, что написал бы лучше.
Знаю одно писал бы долго, с перерывами, после перерывов стиль бы изменялся и появлялась бы кривизна. И знаю другое - никогда бы не взялся его переписывать - макачий труд.
Забесплатно его переписывать не будет никто. Платить за переделываение System.pas тоже никто не будет. Поэтому тут даже и говорить не о чем, используем уж какой есть.
← →
Defunct © (2005-08-03 01:05) [64]Mx © (03.08.05 00:41) [62]
Доступ к биту лучше всего делать по заранее подготовленным маскам. Создаете 64 маски (32 на Or и 32 на And) и все - задача решена.
> Память я никак не смогу выделить на "чистом" ассемблере, к тому же вызов ReallocMem впоследствии производился по-условию.
для битовых полей не надо было даже и память выделять. просто задавать на входе уже подготовленный буфер. (выделение памяти очень ресурсоемкая процедура в сравнении с одной битовой операцией)
← →
Mx © (2005-08-03 01:14) [65]
> Defunct © (03.08.05 01:05) [64]
> для битовых полей не надо было даже и память выделять
А когда каждый байт на счету, когда количество битов заранее неизвестно, когда этих элементов тысячи, а то и миллионы?
← →
TProgrammer (2005-08-03 01:14) [66]
> Я же в отличие от тебя имел дело с такими "конструкциями",
> и зачастую они ни к чему хорошему не приводят. Ни выигрыша
> в производительности, ни экономии времени при написании
> программы, лиш только добавляют сложности и глюков при модификации
> программы.
Тут все зависит от профессиональности программиста, который эти вставки делает. Можно и на асме написать так, что работать будет тормознее, чем на делфи. А можно написать и с вызовом GetMem"а, и работать будет быстрее, чем тоже но на делфи. Если уж писать процедуру на асме, то всю - и если при этом требуется выделить память, то почему не вызвать GetMem или ReallocMem ? Вопросы глючности и трудночитаемости кода - это вопросы профессионализма программиста, а не применяемой технологии.
А что касается твоего профессионализма, то тут есть сомнения. Вот увидел в форуме твой кусок кода из рабочего(!) проекта - прямо удивился - и этот человек учил меня формы создавать:
Defunct © (30.07.05 21:55) [13]
Вот отрыл в рабочем проекте:
procedure UploadFileThroughISP( ACallingProcessHandle : DWord;
FileName: ShortString );stdcall;
begin
if ACallingProcessHandle <> 0 then
Application.Handle := ACallingProcessHandle;
with TISPProgrammerForm.Create( nil ) do
begin
fFileName := FileName;
L_FName.Caption := ExtractFileName( FileName );
ShowModal;
end
end;
И где у тебя разрушается созданный экземпляр TISPProgrammerForm ? Вот это я называю писать через ж...
← →
Defunct © (2005-08-03 01:48) [67]Mx © (03.08.05 01:14) [65]
> А когда каждый байт на счету, когда количество битов заранее неизвестно, когда этих элементов тысячи, а то и миллионы?
Но они же откуда-то берутся эти биты? Раз откуда-то берутся, то и управлять количеством должна отнюдь не процедура изменяющая значение.
TProgrammer (03.08.05 01:14) [66]
> Тут все зависит от профессиональности программиста, который эти вставки делает.
Нет не от этого, много зависит от того, что даже собственный асм код не настолько прозрачен как код на Pascal.
> И где у тебя разрушается созданный экземпляр TISPProgrammerForm ?
разумеется в этои коде - нигде.
"отрыл в рабочем проекте" - это совсем не значит, что
1. код написан мой.
2. код выложен в том виде как и в проекте.
в самом проекте после ShowModal идет куча лабуды где возвращается результат формы за ним и free.
← →
TProgrammer (2005-08-03 01:54) [68]
> Нет не от этого, много зависит от того, что даже собственный
> асм код не настолько прозрачен как код на Pascal
Прозрачность своего кода для самого себя - это и есть признак профессионализма.
> разумеется в этои коде - нигде.
> "отрыл в рабочем проекте" - это совсем не значит, что
> 1. код написан мой. ...
Как ты там говорил ? "Нет повода верить твоим отмазкам. " (С) ;)
← →
Defunct © (2005-08-03 02:15) [69]> Прозрачность своего кода для самого себя - это и есть признак профессионализма.
Ты хочешь сказать, что профессионализ позволит тебе с одинаковой скоростью править программу на алгоритмическом языке и машинном языке?
Доводилось ли тебе существенно изменять собственный асм код примерно 200k через 3-4 года после внедрения?
> Как ты там говорил ? "Нет повода верить твоим отмазкам. "
Я тебя и не заставляю.
можешь считать что здесь ты выиграл, а мне позор за такой код.
← →
TProgrammer (2005-08-03 02:27) [70]
> Ты хочешь сказать, что профессионализ позволит тебе с одинаковой
> скоростью править программу на алгоритмическом языке и машинном
> языке?
До определенного объема вставки - разница в скорости не заметна. Но мы и не говорим сейчас о чистом ассемблере, а ассемблерная вставка редко превышает пару-тройку страниц кода, опять же, если пишется профессионалом.
> Доводилось ли тебе существенно изменять собственный асм
> код примерно 200k через 3-4 года после внедрения?
Нет и надеюсь не придется :) Все-таки я не системщик - на написание ОС не притендую.
← →
Defunct © (2005-08-03 03:00) [71]TProgrammer (03.08.05 02:27) [70]
> До определенного объема вставки - разница в скорости не заметна. Но мы и не говорим сейчас о чистом ассемблере, а ассемблерная вставка редко превышает пару-тройку страниц кода, опять же, если пишется профессионалом.
Что-то скучновато уже стало.
Тема полностью исчерпана...
итого (в контексте вставок):
1. На асме вообще лучше не писать без крайней потребности.
2. Если и писать, то только ради увеличения производительности кода, старатясь не использовать вызовы процедур написанных на Паскале.
3. Если возникает потребность вызова процедур написанных на паскале и без этого нельзя обойтись тогда goto 1.
4. Особый случай - организация защиты, тут вызовы delphiшных процедур/функций оправданы, но это уже совсем другая тема.
короче [32]. ;>
> Нет и надеюсь не придется :)
прочувствовал бы всю прелесть неалгоритмического языка. ;>
анкетку-то заполни, не уж-то так трудно?
← →
TProgrammer (2005-08-03 03:17) [72]
> короче [32]. ;>
Кроме пары особых случаев, один ты уже озвучил - от себя добавлю еще случай использования asm"а когда удобно использовать например SSE - тогда приходится пользоваться asm.
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2005.08.21;
Скачать: [xml.tar.bz2];
Память: 0.65 MB
Время: 0.044 c