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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2022, 01:08   #11
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Не стоит играться с этими объектами на asm.
Полностью подтверждаю.
northener вне форума Ответить с цитированием
Старый 08.09.2022, 01:35   #12
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию

Цитата:
Не стоит играться с этими объектами на asm
Вот наверное, из-за этого пришел к такому коду

Предназначение кода: когда в exe-шнике много string-констант, там уже на несколько килобайт начинает накапливаться сумма разделителей между ними. Там же по 12 байт разделители занимают.

Пришла идея - соединить все в одну большую строку-константу, мини-строки разделять символом #1, все равно он нигде не используется (#13#10 в некоторых строках применяются) и такой вот процедурой извлекать оттуда нужную строку

Код:
type
  pString=^string;
Код:
Function StringFromConst(s:pstring; Index1:byte):string; register
asm
  push ebx
  push edi

  mov eax, [eax]
  push ecx

  mov edi, eax
  mov bl, Index1

  @Begin1:
    mov bh, [edi]
    inc edi
    cmp bh, 1
      jne @Begin1
    dec bl
    cmp bl, 0
      ja @Begin1
  {End1}
  mov edx, edi
  sub edx, eax
  inc edx

  mov ecx, 0
  @Begin2:
    mov bh, [edi]
    cmp bh, 1
      je @End2
    inc edi
    inc ecx
    jmp @Begin2

  @End2:
  call system.@LStrCopy
  
  pop edi
  pop ebx
end;
Kronos913 вне форума Ответить с цитированием
Старый 08.09.2022, 01:43   #13
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Предназначение кода: когда в exe-шнике много string-констант, там уже на несколько килобайт начинает накапливаться сумма разделителей между ними. Там же по 12 байт разделители занимают.

Пришла идея - соединить все в одну большую строку-константу, мини-строки разделять символом #1, все равно он нигде не используется (#13#10 в некоторых строках применяются) и такой вот процедурой извлекать оттуда нужную строку
Пожалуйста не обижайтесь, но это бред сивой кобылы в тёмную мартовскую ночь. Хотя вы и не кобыла, да и на дворе сентябрь, а не март. О каких килобайтах идёт речь? Если все современные полнофункциональные программы в самом минимальном случае мегабайтные!
northener вне форума Ответить с цитированием
Старый 08.09.2022, 05:15   #14
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Код:
Function StringFromConst(s:pstring; Index1:byte):string; register ...
Лучше не надо. Этот код сильно не идеален, чтобы им подменять функции разделения. Вы как минимум задали цикл с 7 командами. Они будут очень сильно нагружать дешифратор. Куда оптимальнее было бы использование хотя бы строковых инструкций или вообще многобайтового поиска на sse3+. Но этот ваш код содержит множество инструкций, которые просто будут грузить почем зря CPU, но эффекта оптимизации будет 0.

Если так хочется использовать строки, тогда используйте PChar/PAnsiChar/PWideChar - у них нету лишней информации. Только символы строки и 0 в конце. Все строки PChar не будут разделяться дополнительной информацией. А поиск нужной строки будет не нужен - просто объедините в массив и используйте индексацию.
macomics вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Несколько вопросов по ИС Niddin_hp Помощь студентам 0 22.11.2015 21:06
Несколько вопросов Rost93 PHP 18 19.09.2012 19:38
Несколько вопросов по C++ Antitime Общие вопросы C/C++ 10 26.01.2012 15:00
несколько вопросов spydark91 Общие вопросы Delphi 2 18.07.2011 13:48
несколько вопросов fitc Общие вопросы Delphi 28 14.07.2009 21:20