Текущий архив: 2004.04.11;
Скачать: CL | DM;
ВнизЛокальную и много или нет но одну? Найти похожие ветки
← →
R (2004-04-20 08:44) [0]В программе в процедурах часто использую такую конструкцию
var
L:TListView;
begin
L:=функция определяющая нужный TListView;
и далее с переменной L делаю разные действия
...........
end;
Дело в том что процедур с таким действием я насчитал около 26,
т.е. если я правильно понимаю программа хранит 26 переменных
(локальных) TListView или не так? И второй вопрос может
лучше создать одну глобальную для данного модуля FL и присваивать
значение ей, как лучше посоветуйте.
← →
R (2004-04-20 08:44) [0]В программе в процедурах часто использую такую конструкцию
var
L:TListView;
begin
L:=функция определяющая нужный TListView;
и далее с переменной L делаю разные действия
...........
end;
Дело в том что процедур с таким действием я насчитал около 26,
т.е. если я правильно понимаю программа хранит 26 переменных
(локальных) TListView или не так? И второй вопрос может
лучше создать одну глобальную для данного модуля FL и присваивать
значение ей, как лучше посоветуйте.
← →
Anatoly Podgoretsky © (2004-04-20 08:49) [1]Неправильно понял, не держит ни одной, место это на стеке и используется всеми процедурами взаимно.
← →
Anatoly Podgoretsky © (2004-04-20 08:49) [1]Неправильно понял, не держит ни одной, место это на стеке и используется всеми процедурами взаимно.
← →
R (2004-04-20 09:13) [2]Значит лучше много локальных переменных чем одна глобальная?
← →
R (2004-04-20 09:13) [2]Значит лучше много локальных переменных чем одна глобальная?
← →
Юрий Зотов © (2004-04-20 09:55) [3]> R (20.04.04 09:13) [2]
Локальные переменные хранятся в стеке, а глобальные - в основной памяти. Это значит, что глобальная переменная существует всегда, а локальная - только во время выполнения процедуры, в которой она объявлена. И, поскольку, 2 процедуры в одном потоке одновременно выполняться не могут, то даже если у Вас 100 тыс. локальных переменных, в каждый момент времени существует все равно всего одна из них (если, конечно, процедуры не вызываются одна из другой). Поэтому 100 тыс. локальных переменных отъедают ровно столько же памяти, сколько и одна глобальная (а в среднем даже меньше, потому что в некоторые моменты времени ни одна из них не существует). Зато локальные переменные подстраховывают от ошибок, от которых не могут подстраховать глобальные переменные.
Глобальные переменные имеют смысл, когда хранящиеся в них данные совместно используются различными процедурами, методами или модулями. В остальных случаях - незачем (да и совместное использование старайтесь свести к необходимому минимуму).
А в Вашем варианте, возможно, удастся обойтись и вообще без всяких переменных. Предположим, функция определяющая нужный ListView имеет вид:
function GetListView(...): TListView;
begin
...
end;
Тогда в любой процедуре можно не объявлять переменную L, а написать так:
with GetListView(...) do
begin
...
end;
В этом случае компилятор все сделает сам и программа будет более оптимальной.
← →
Юрий Зотов © (2004-04-20 09:55) [3]> R (20.04.04 09:13) [2]
Локальные переменные хранятся в стеке, а глобальные - в основной памяти. Это значит, что глобальная переменная существует всегда, а локальная - только во время выполнения процедуры, в которой она объявлена. И, поскольку, 2 процедуры в одном потоке одновременно выполняться не могут, то даже если у Вас 100 тыс. локальных переменных, в каждый момент времени существует все равно всего одна из них (если, конечно, процедуры не вызываются одна из другой). Поэтому 100 тыс. локальных переменных отъедают ровно столько же памяти, сколько и одна глобальная (а в среднем даже меньше, потому что в некоторые моменты времени ни одна из них не существует). Зато локальные переменные подстраховывают от ошибок, от которых не могут подстраховать глобальные переменные.
Глобальные переменные имеют смысл, когда хранящиеся в них данные совместно используются различными процедурами, методами или модулями. В остальных случаях - незачем (да и совместное использование старайтесь свести к необходимому минимуму).
А в Вашем варианте, возможно, удастся обойтись и вообще без всяких переменных. Предположим, функция определяющая нужный ListView имеет вид:
function GetListView(...): TListView;
begin
...
end;
Тогда в любой процедуре можно не объявлять переменную L, а написать так:
with GetListView(...) do
begin
...
end;
В этом случае компилятор все сделает сам и программа будет более оптимальной.
← →
R (2004-04-20 11:31) [4]Спасибо.
← →
R (2004-04-20 11:31) [4]Спасибо.
Страницы: 1 вся ветка
Текущий архив: 2004.04.11;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.037 c