Модератор: Модераторы
Лекс Айрин писал(а):Используй для счетчиков цикла не Integer, а Byte -- я сомневаюсь, что цикл будет крутиться больше 250 раз.
Напрягать не надо, надо говорить об ошибке другими способами: сделать неактивной кнопку продолжения и выделить неверный ввод красным цветом - не напрягает и сразу видно где ошибка.azsx писал(а):я не хочу напрянать юзера showmessage ой
Лекс Айрин писал(а):Тут еще есть вопрос не скорости (все равно счетчик не дает особой потери производительности, да и, насколько мне известно, циклы крутятся преимущественно на регистрах процессора).
SAK писал(а):И даже для работы с гегистрами оптамальнее переменные равные по разрядности регистру, иначе идёт потеря производительности, причём не всегда явная,
SAK писал(а):Что касается переносимости, то если для переменной достаточно 1 байта, то применение переменной большей разрядности проблем вызвать не может, если, конечно, при расчётах не используется переполнение.
Лекс Айрин писал(а):переменную счетчик придется уменьшать, так как размер программы увеличится до безобразия? Или что из-за большого размера счетчика лично Ваша программа зависнет?
for I:=0 to MaxInt do ...;
i:=0; while i>0 do begin ... Inc(i); end;
SAK писал(а):Это как? Я не могу понять как размерность переменной может повлиять на размер программы.
type
Integer=Byte;
Var i:Integer;
Begin
...
i:= 3000;
...
end.
Лекс Айрин писал(а):Например, при определении типа (класса), даже какого то пресловутого массива. Плюс, даже неинициализированные переменные требуют места для хранения (если есть возможность, то они тупо заливаются всем сегментом в память)
Лекс Айрин писал(а):и все, глюк обеспечен. Или наоборот, сделать integer намного больше.
DWord=0..255;
WORD=0..$FFFFFFFF;
Byte=0..65535;
var s: array[0..65000] of word;
procedure TForm1.FormCreate(Sender: TObject);
var i,j: word;
c: DWORD;
k,l: integer;
begin
c:=GetTickCount;
for k:=0 to 65000 do
for l:=0 to 65000 do s[l]:=s[l] xor k;
c:=GetTickCount-c;
Label2.Caption:=IntToStr(c);
c:=GetTickCount;
for j:=0 to 65000 do
for i:=0 to 65000 do s[i]:=s[i] xor j;
c:=GetTickCount-c;
Label1.Caption:=IntToStr(c);
end;
SAK писал(а):понятие выравнивание данных https://ru.wikipedia.org/wiki/Выравнивание_данных
SAK писал(а):А ещё есть такое понятие выравнивание данных
SAK писал(а):Для полного счастья введите свои типы:
SAK писал(а):Использование в качестве счетчика цикла переменной типа Word приводит к проигрышу производительности более 13%.
SSerge писал(а):Вот это вот делает весьма сомнительным способ сохранения например Record'ов или массивов операторами типа BlockWrite.
Лекс Айрин писал(а):А зачем?
Лекс Айрин писал(а):bormant, можно даже хуже (так как integer это переопределяемый тип)
- Код: Выделить всё
type Integer=Byte;
Var i:Integer;
Begin
i:= 3000;
end.
и все, глюк обеспечен.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 259