DWORD var;
void f1(void)
{
DWORD var1,var2;
var1=var;
var2=var1;
}
Переменные
Скажите пожайлуста, что лучше создать одну глобальную переменную или несколько локальных в плане быстродействия приложения. Или это не имеет никакого значения?
Цитата:
Originally posted by Ivan_Cheremisov
Скажите пожайлуста, что лучше создать одну глобальную переменную или несколько локальных в плане быстродействия приложения. Или это не имеет никакого значения?
Скажите пожайлуста, что лучше создать одну глобальную переменную или несколько локальных в плане быстродействия приложения. Или это не имеет никакого значения?
у меня были случаи, когда за счет доп. переменных получалось ускорить вычисления, а иногда при оптимизации кода некоторые переменные можно выкинуть. Так что быстродействие более зависит от того, как ты эти переменные используешь, а не какого они типа: глобальные или локальные. :)
Цитата:
Originally posted by Ivan_Cheremisov
Или это не имеет никакого значения?
Или это не имеет никакого значения?
Насчет глобальных переменных есть еще одно соображение - это зло, затрудняющее поддержку программы.
Цитата:
Originally posted by Ivan_Cheremisov
Скажите пожайлуста, что лучше создать одну глобальную переменную или несколько локальных в плане быстродействия приложения. Или это не имеет никакого значения?
Скажите пожайлуста, что лучше создать одну глобальную переменную или несколько локальных в плане быстродействия приложения. Или это не имеет никакого значения?
В принципе - не имеет - какая компу разница - где работать с памятью - в виртуальном пространстве процесса - или в пространстве стека?
Вот для наглядности пример:
На C:
Код:
А вот как будет это выглядеть в скомпилированном виде (ассемблерное представление):
Код:
sub f1
push ebp
mov ebp, esp
;Выделение места в стеке под локальные переменные
sub esp,8
;Теперь [ebp-4] это var1 а [ebp-8] - это var2
mov eax, [address var]
; address var - Это всмысле VA(Virtual Address) переменной var в имадже PE-шника - ну например пусть будет равным 0x403000
mov [ebp-4], eax
mov [ebp-8], eax
mov esp, ebp
pop ebp
ret
push ebp
mov ebp, esp
;Выделение места в стеке под локальные переменные
sub esp,8
;Теперь [ebp-4] это var1 а [ebp-8] - это var2
mov eax, [address var]
; address var - Это всмысле VA(Virtual Address) переменной var в имадже PE-шника - ну например пусть будет равным 0x403000
mov [ebp-4], eax
mov [ebp-8], eax
mov esp, ebp
pop ebp
ret
Вот тебе и вся разница между глобальными и локальными переменными с точки зрения скомпилированной программы. Ты видишь где тут может быть просадка по скорости для одного или для другого? Я лично нет. Команда mov выполнятся с одинаковым количеством тактов на отельно взятой машине.
А вот с точки зрения написания самой программы - зачем заграмождать ее лишними глобальными переменными? Обычно глобальные переменные используются для того, чтобы можно было иметь к ним доступ в разных фрагментах кода. А ежели тебе переменная нужна только на время жизни одной функции и больше нигде не используется - то какой смысл объявлять ее глобально?