18:08
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 1
  • 1
Модератор форума: AXE, Weddew  
Глобальные или локальные переменные
toneysixДата: Суббота, 16.01.2010, 02:18 | Сообщение # 1
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Доброе время суток Уважаемые Форумчане! Собственно вопрос заключается в следующем. Как вредит использование глобальных переменных в моде, т.е к примеру когда их очень много. У меня достаточно много проверок без глобальных переменных просто нельзя обойтись. Локальные же переменные не могут помочь, только в случаи передачи возврата локальной переменной из паблика в паблик. Ещё для флагов я использую так
stock Check1[MAX_PLAYERS Char]; т.е хранение элементов по одному байту, не как в обычных массивах по 4 байта. Есть ещё идея сделать в каждой функции например для игроков отдельный файл который читается, и оттуда уже берутся локальные переменные static. Всё же, что можно с ними сделать? Заранее благодарен за ответ.



Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
EakwarpДата: Суббота, 16.01.2010, 06:34 | Сообщение # 2
Мастер джэдай
Группа: Продвинутые
Сообщений: 4874
Награды: 179
Город: Москва
Репутация: 2543
Замечания: 60%
Статус:
Все переменные выгружаются в оперативную память, вне зависимости от того глобальные они или нет.


More than 4 years of development, more than 250,000 lines of source code, more than a hundred units and more than 3400 revisions. Valakas Roleplay - choose your role.


Valakas Roleplay on Twitter

Платные консультации, разработка, в ICQ. Дорого.
toneysixДата: Суббота, 16.01.2010, 12:16 | Сообщение # 3
Джэдай
Группа: I'm V.I.P.
Сообщений: 1731
Награды: 77
Город: Салават
Репутация: 1825
Замечания: 0%
Статус:
Eakwarp на сколько я знаю, локальные переменные помещаются в стек, а стек точно лимитирован, глобальные переменные имеют как бы статус выше простых,компилятор их вешает на регистры процессора,,за счёт регистров вроде типа происходит быстрая обработка этих переменных,а локальны к примеру записываются в память,при необходимости изменения считываются оттуда меняются и снова записываются. К глобальной переменной можно получить доступ откуда угодно и никогда точно не знаешь какой механизм изменил, зачем, когда.. Такое лимитирование доступа для отдельно стоящих подсистем позволяет жестко контролировать изменение и чтение локальных переменных, а если и позволяет, только открытыми функциями, которые находятся в подсистемах общего скрипта


Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru

Сообщение отредактировал toneysix - Суббота, 16.01.2010, 12:18
stepmexДата: Суббота, 16.01.2010, 13:51 | Сообщение # 4
Мастер джэдай
Группа: Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус:
Современные сервера позволяют игнорировать все эти мелочи.
Говорю тебе как человек который делал скрипт весом в ~400Мб crazy
800Мб к сожелению сервер отказался запускать сославшись на слишком большой объем amx файла :D



И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
EdYaДата: Суббота, 16.01.2010, 14:08 | Сообщение # 5
Местный
Группа: Продвинутые
Сообщений: 737
Награды: 16
Город: Таллинн
Репутация: 259
Замечания: 20%
Статус:
Не забываем, что локальные переменные известны только той функции, в которой они были объявлены. Да, глобальные переменные могут быть изменены любой функцией и это может принести возможность появления трудно-находимых ошибок, однако, если знать что пишешь, этого можно избежать.
[ER]ChezДата: Суббота, 16.01.2010, 14:23 | Сообщение # 6
Уверенный в себе
Группа: Пользователи
Сообщений: 250
Награды: 5
Город: Крыжопль
Репутация: 104
Замечания: 100%
Статус:
EdYa, ты тут явно не в тему...
EdYaДата: Суббота, 16.01.2010, 15:42 | Сообщение # 7
Местный
Группа: Продвинутые
Сообщений: 737
Награды: 16
Город: Таллинн
Репутация: 259
Замечания: 20%
Статус:
[ER]Chez, если тут решается вопрос использования глобальных или локальных переменных, почему бы не напомнить основные правила их использования?
toneysix, короче говоря, используй глобальные переменные, если локальные не подходят.
Quote (toneysix)
Как вредит использование глобальных переменных в моде, т.е к примеру когда их очень много

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

[ER]ChezДата: Суббота, 16.01.2010, 15:57 | Сообщение # 8
Уверенный в себе
Группа: Пользователи
Сообщений: 250
Награды: 5
Город: Крыжопль
Репутация: 104
Замечания: 100%
Статус:
EdYa, ничо что тут затронут вопрос нагрузки на сервер, использования ресурсов, регистров, и т.д.
А твое замечание про невозможность использования переменных локальных в другом месте явно не к месту, тк. человек, знающий подробности, описанные выше, то он по-любому знает разницу между локальными и глобальными переменными.

EdYaДата: Суббота, 16.01.2010, 16:06 | Сообщение # 9
Местный
Группа: Продвинутые
Сообщений: 737
Награды: 16
Город: Таллинн
Репутация: 259
Замечания: 20%
Статус:
[ER]Chez, я написал выше, что памяти меньше используется при использовании глобальных переменных. К тому же, чтобы переменную не изменяла одна из функций её использующих, можно сделать константу



Сообщение отредактировал EdYa - Суббота, 16.01.2010, 16:16
stepmexДата: Суббота, 16.01.2010, 19:33 | Сообщение # 10
Мастер джэдай
Группа: Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус:
Quote (EdYa)
памяти меньше используется при использовании глобальных переменных.
какраз наоборот, при использовании локальных переменных память используется меньше, потому что зачастую такие переменные даже не записываются в память.
Глобальная переменная всегда хранится в памяти, а это постоянный цикл "поиск-чтение-обработка-запись".
Так что EdYa, ты тут явно не в тему...



И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
DarkByteДата: Суббота, 16.01.2010, 21:00 | Сообщение # 11
Долгожитель
Группа: Продвинутые
Сообщений: 1577
Награды: 7
Город: Челябинск
Репутация: 182
Замечания: 0%
Статус:
Вообще, глобальные переменные неизбежны. Но если переменная используется только внутри функции, то не нужно выносить её в глобальное пространство имён, считая что так скрипт будет работать быстрее, ибо не нужно будет каждый раз выделять память под переменную. Стек, не стек, врядли вам стоит об этом задумываться, подумайте лучше об оптимизации алгоритмов :)

Добавлено (16.01.2010, 21:00)
---------------------------------------------
toneysix, у процессора не так много регистров и туда ничего не вешается, там хранятся данные, используемые для выполнения конкретно операции, например сложения двух чисел. да и их размер не позволяет туда засунуть что либо большое, типа массива, только указатель на него.
все данные хранятся в оперативной памяти и её скорости вполне достаточно для скрипта любой сложности :)


MusicSig vkontakte - расширение функционала ВКонтакте для Google Chrome
ZirkiNДата: Воскресенье, 17.01.2010, 04:49 | Сообщение # 12
Постоялец
Группа: Продвинутые
Сообщений: 326
Награды: 15
Город: Новосибирск
Репутация: 144
Замечания: 0%
Статус:
Quote (stepmex)
"поиск-чтение-обработка-запись".

только "чтение-обработка-запись", поиск не производится, т.к. имя указывает на саму ячейку (в массиве имя+индекс), а при компиляции имя заменяется адресом.
причем читает из одних ячеек, обрабатывает процессором, записывает в эти же или другие ячейки.
Quote (stepmex)
потому что зачастую такие переменные даже не записываются в память.

выделяется память обязательно во время декларации, просто как заметил EdYa глобальные переменные висят в памяти всегда, а локальные - только пока выполняется функция
Quote (toneysix)
а стек точно лимитирован,

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



all:GMCC ~2%
current:GMCC.C.L0 ~49%


Сообщение отредактировал ZirkiN - Воскресенье, 17.01.2010, 04:52
stepmexДата: Воскресенье, 17.01.2010, 11:04 | Сообщение # 13
Мастер джэдай
Группа: Продвинутые
Сообщений: 2914
Награды: 35
Город: Е-бург
Репутация: 1032
Замечания: 0%
Статус:
Quote (ZirkiN)
выделяется память обязательно во время декларации
сейчас некоторые переменные при обрботке скрипта не уходят дальше процессорного кэша.



И создал Бог женщину!.. Существо получилось злобное, но симпатичное...
CRUSHДата: Воскресенье, 17.01.2010, 11:24 | Сообщение # 14
Местный
Группа: Продвинутые
Сообщений: 531
Награды: 5
Город: SAMP
Репутация: 89
Замечания: 100%
Статус:
Oo вам в microsoft надо идти работать:D прочитал все посты,многое не понел crazy :D


Пишу скрипты,дорабатываю РП моды на заказ,не дорого - 607-559-798
  • Страница 1 из 1
  • 1
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua