Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Переменные

7.5K
17 мая 2005 года
Ivan_Cheremisov
23 / / 11.05.2005
Скажите пожайлуста, что лучше создать одну глобальную переменную или несколько локальных в плане быстродействия приложения. Или это не имеет никакого значения?
1.9K
17 мая 2005 года
solovey
113 / / 25.07.2004
Цитата:
Originally posted by Ivan_Cheremisov
Скажите пожайлуста, что лучше создать одну глобальную переменную или несколько локальных в плане быстродействия приложения. Или это не имеет никакого значения?


у меня были случаи, когда за счет доп. переменных получалось ускорить вычисления, а иногда при оптимизации кода некоторые переменные можно выкинуть. Так что быстродействие более зависит от того, как ты эти переменные используешь, а не какого они типа: глобальные или локальные. :)

10
17 мая 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by Ivan_Cheremisov
Или это не имеет никакого значения?


Насчет глобальных переменных есть еще одно соображение - это зло, затрудняющее поддержку программы.

487
17 мая 2005 года
ddnh_bc
301 / / 16.09.2003
Цитата:
Originally posted by Ivan_Cheremisov
Скажите пожайлуста, что лучше создать одну глобальную переменную или несколько локальных в плане быстродействия приложения. Или это не имеет никакого значения?



В принципе - не имеет - какая компу разница - где работать с памятью - в виртуальном пространстве процесса - или в пространстве стека?

Вот для наглядности пример:

На C:

 
Код:
DWORD var;

void f1(void)
{
  DWORD var1,var2;

  var1=var;
  var2=var1;
}


А вот как будет это выглядеть в скомпилированном виде (ассемблерное представление):

Код:
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


Вот тебе и вся разница между глобальными и локальными переменными с точки зрения скомпилированной программы. Ты видишь где тут может быть просадка по скорости для одного или для другого? Я лично нет. Команда mov выполнятся с одинаковым количеством тактов на отельно взятой машине.

А вот с точки зрения написания самой программы - зачем заграмождать ее лишними глобальными переменными? Обычно глобальные переменные используются для того, чтобы можно было иметь к ним доступ в разных фрагментах кода. А ежели тебе переменная нужна только на время жизни одной функции и больше нигде не используется - то какой смысл объявлять ее глобально?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог