Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Глобальные или локальные переменные? [D6, XP]


Mr tray ©   (2006-06-07 00:14:00) 

Здравствуйте. Тут такая ситуация: есть процедура, которая вызывается довольно часто (где то каждые 2-3 секунды). Следует ли сделать по этому поводу все переменные, использующиеся в ней, глобальными, чтобы не производилось постоянное выделение и освобождение памяти, которое будет замедлять работу проца.


Zeqfreed   (2006-06-07 10:50:00) [1]


> В eax "адрес" S ?

Это уже надо смотреть ассемблерный листинг, тем более для различных версий компилятора он будет отличаться.


balepa   (2006-06-07 10:28:00) [2]

Zeqfreed ©   (07.06.06 06:28) [5]
переменные будут помещены

В eax "адрес" S ?


Zeqfreed   (2006-06-07 06:28:00) [3]

[3] Mr tray   (07.06.06 01:42)
В данном коде скорее всего даже не будет использован стек, переменные будут помещены в регистры общего назначения оптимизатором.


tButton   (2006-06-07 04:29:00) [4]

глобальная переменная не может быть счётчиков в цикле... по крайней мере - в D5 не может =)


Mr tray   (2006-06-07 01:42:00) [5]

а вот если, допустим, такая ситуация: существуют несколько процедур, каждая из которых имеет свои локальные переменные. Для каждой переменной кождой процедуры выделется место на стеке? А то, если нету такого, что какая-то из этих процедур вызывается другой, можно сделать глобальные переменные вместо локальных. Я вот о чем:
procedure a(s:string);
var
 i,n:integer;
begin
 n:=length(s);
 for i:=1 to n do
   s[i]:='0';
end;
procedure b(s:string);
var
 i,n:integer;
begin
 n:=length(s);
 for i:=1 to n do
   s[i]:=chr(ord(s[i])+1);
end;

передеать в:

var
 i,n:integer;
procedure a(s:string);
begin
 n:=length(s);
 for i:=1 to n do
   s[i]:='0';
end;
procedure b(s:string);
begin
 n:=length(s);
 for i:=1 to n do
   s[i]:=chr(ord(s[i])+1);
end;


Mr tray   (2006-06-07 01:33:00) [6]

ясно, спасибо


Джо   (2006-06-07 00:18:00) [7]

> Следует ли сделать по этому поводу все переменные, использующиеся
> в ней, глобальными, чтобы не производилось постоянное выделение
> и освобождение памяти, которое будет замедлять работу проца.

Не следует. Ничего не будет выделяться, будет просто использоваться заранее зарезервированное место на стеке и всё.


Наверх

Титульная страница Поиск, карта сайта Написать письмо