Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.25;
Скачать: CL | DM;

Вниз

Глобальные или локальные переменные?   Найти похожие ветки 

 
Mr tray   (2006-06-07 00:14) [0]

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


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

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

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


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

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


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

а вот если, допустим, такая ситуация: существуют несколько процедур, каждая из которых имеет свои локальные переменные. Для каждой переменной кождой процедуры выделется место на стеке? А то, если нету такого, что какая-то из этих процедур вызывается другой, можно сделать глобальные переменные вместо локальных. Я вот о чем:
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;


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

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


 
Zeqfreed ©   (2006-06-07 06:28) [5]

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


 
balepa ©   (2006-06-07 10:28) [6]

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

В eax "адрес" S ?


 
Zeqfreed ©   (2006-06-07 10:50) [7]


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.06.25;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.056 c
15-1149121986
dancer
2006-06-01 04:33
2006.06.25
PHP: выборка из массива


4-1143400938
FunkyByte
2006-03-26 23:22
2006.06.25
Пересылка записи между процессами


15-1148583076
Аноним2000
2006-05-25 22:51
2006.06.25
Как получить ответ от Com-порта?


6-1139695044
Yeg
2006-02-12 00:57
2006.06.25
Изменения в ICQ-протоколе...


1-1147685021
QuickFinder
2006-05-15 13:23
2006.06.25
Дерево данных