HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Глюк альтернативных модулей для Delphi
  #1  
Старый 21.04.2009, 19:50
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию Глюк альтернативных модулей для Delphi

некоторым из нас инода приходилось использовать альтернативные системные модули для Delphi (sysinit и system).
Кто незнает для чего они, то отвечаю - с помощью их можно очень сильно уменьшить размер программы написанных без VCL. Порядком в 2 раза уменьшается минимальное приложение.
Код:
program test;
{$APPTYPE CONSOLE}
begin
 writeln('hello');
end.
Весит 7 кил. Со стандартными модулями - 15 кил.
Так что использовать их выгодно.
В инете очень часто встречаются эти модули.
Но случайно был замечен в них один глюк.

Глюк связан с генератором случайных чисел.
к функции random притензий нет. А вот randomize была жестоко убита.
Т.е. randomize задает начальное состояние ГСЧ.
Фактически эта функция заносит значение системного времяни в переменную RandSeed
Но в альтернативных модулях походу дела это значение статическое.
т.е.
Код:
for y:=1 to 10 do
 begin
   randomize;
   for x:=1 to 10 do write(random(10));
   writeln;
 end;
Даст 10 одинаковых строк.
Чтобы избавиться от этого глюка достаточно самому задать значение RandSeed.
Чтобы сильно не увеличивать размер функцией получения времяни, для инициализации будим использовать количество тактов сделаннх процессором после ребута/включения.

Сделать это можно просто:
Код:
procedure myrandomize;assembler;
asm
 rdtsc 
 add eax,edx
 mov RandSeed,eax
end;
P.S. Из-за этого гюкнутового randomize стока хрени херовой было.
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
МикроДжоинер для начинающих ReanimatoR Статьи 23 02.01.2010 15:07



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.