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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2010, 13:10   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Или влазят?
Влазят но не все Те кому хватило регистров - 5-6 переменок влезли, а это уже прирост в скорости огромный. Остальные в памяти.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.12.2010, 13:45   #12
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Попробывал еще вот так извратнутся
Код:
const
  m1 = 100;
  m2 = 10;
var
  j1, j2, j3, j4: Int64;

procedure MyProc1;
var
  i1, i2, i3, i4: Int64;
begin
  i1 := 0;
  while i1 < m1 do begin
  i2 := 0;
  while i2 < m1 do begin
  i3 := 0;
  while i3 < m1 do begin
  i4 := 0;
  while i4 < m1 do begin
    i4 := i4 + 1;
  end;
    i3 := i3 + 1;
  end;
    i2 := i2 + 1;
  end;
    i1 := i1 + 1;
  end;
end;

procedure MyProc2;
begin
  j1 := 0;
  while j1 < m1 do begin
  j2 := 0;
  while j2 < m1 do begin
  j3 := 0;
  while j3 < m1 do begin
  j4 := 0;
  while j4 < m1 do begin
    j4 := j4 + 1;
  end;
    j3 := j3 + 1;
  end;
    j2 := j2 + 1;
  end;
    j1 := j1 + 1;
  end;
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i, b, e: Cardinal;
begin
  b := GetTickCount;
  for i := 1 to m2 do MyProc1;
  e := GetTickCount;
  ShowMessage (IntToStr (e-b));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i, b, e: Cardinal;
begin
  b := GetTickCount;
  for i := 1 to m2 do MyProc2;
  e := GetTickCount;
  ShowMessage (IntToStr (e-b));
end;
Использование Int64 привело к уравниванию скоростей. Но стоит заменить его на Integer, как MyProc1 вырывается вперед. Выходит "четверное" слово даже не пытаются запихать в регистры.
Sibedir вне форума Ответить с цитированием
Старый 30.12.2010, 14:05   #13
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

К слову, FPC хранит локальные переменные в стеке, а не в регистрах.
То есть:
Код:
procedure MyProc1;
var
  i1, j1, k1: Integer;
begin
	i1:=84;
	j1:=85;
	k1:=86;
end;
будет выглядеть так:
Код:
	subl	$12,%esp
# Var i1 located at ebp-4
# Var j1 located at ebp-8
# Var k1 located at ebp-12
# [8] i1:=84;
	movw	$84,-4(%ebp)
# [9] j1:=85;
	movw	$85,-8(%ebp)
# [10] k1:=86;
	movw	$86,-12(%ebp)
А процедура:
Код:
var
  i2, j2, k2: Integer;
...
procedure MyProc2;
begin
	i2:=86;
	j2:=87;
	k2:=88;
end;
будет выглядеть:
Код:
# [15] i2:=86;
	movw	$86,U_P$PROGRAM_I2
# [16] j2:=87;
	movw	$87,U_P$PROGRAM_J2
# [17] k2:=88;
	movw	$88,U_P$PROGRAM_K2
То есть скорость доступа должна быть близка.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 30.12.2010, 14:05   #14
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Выходит "четверное" слово даже не пытаются запихать в регистры.
Ага. Оно тудыть не влезет никак )))) Хотя если кувалдой по попе ее бить может и влезет
Цитата:
FPC
Free Pascal?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.12.2010, 14:08   #15
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Цитата:
Free Pascal?
Ага, он самый.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 30.12.2010, 14:10   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Сишный компилятор по-моему тоже в стеке хранит... А вот Делфи юзает регистры где можно и где нельзя, и иногда получаются казусы, приходится оптимизатор лочить для некоего участка кода.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.12.2010, 14:11   #17
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

А Мыщъх вот пишет в статье "Техника оптимизации под Linux"
Цитата:
Избегайте использования глобальных и статических переменных – локальные переменные компилятору намного проще оптимизировать.
пыщь
JTG вне форума Ответить с цитированием
Старый 30.12.2010, 14:17   #18
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Сишный компилятор по-моему тоже в стеке хранит... А вот Делфи юзает регистры где можно и где нельзя, и иногда получаются казусы, приходится оптимизатор лочить для некоего участка кода.
Да, сишный компилятор хранит в стеке.
Только что проверил, процедуры, приведенные на первой странице, на FPC выполняются с равной скоростью.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 30.12.2010, 14:18   #19
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Мыщъх
Кто это?? уж сколько раз слышу о нем, а кто это не могу понять...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 30.12.2010, 14:21   #20
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

Я для себя сделал 3 не хитрых вывода:
1. Экономно расходовать память на локальные переменные
2. По возможности разбивать тело процедур на части в которых стараться "повторно" использовать локальные переменные для новых нужд (это же позволит оптимизатору сработать лучше)
3. Использовать глобальные переменные для глобальных нужд, а не для временного хранения данных
Sibedir вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Локальные переменные Sibedir Общие вопросы Delphi 30 24.12.2010 04:42
глобальные переменные ZuBy Общие вопросы Delphi 3 11.09.2010 14:17
Глобальные и локальные переменные Kapitann JavaScript, Ajax 2 03.08.2010 14:24
Си++.Глобальные,локальные параметры. Медина Помощь студентам 0 02.06.2009 21:51
Локальные и глобальные переменные. Proger10 Общие вопросы Delphi 1 04.05.2009 05:55