Oxygen D
Вернулся
offline
Опыт:
5,180Активность: |
Дефайны или константы?
Как лучше и почему?
|
18.01.2012, 15:12 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alexprey
познающий Unity
offline
Опыт:
68,501Активность: |
Oxygen_D, ну обычно юзают defaine, потому что не они в отличии не занимают ячейку памяти, а просто препроцессором вставляются в местах их использования. |
18.01.2012, 15:13 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Oxygen D
Вернулся
offline
Опыт:
5,180Активность: |
alexprey, Ну, а на сколько это больше нагружает игру? Просто речь идет о перезаписи нескольких сотен констант в дефайны. |
18.01.2012, 15:26 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Master_chan
Полуночный командир
offline
Опыт:
15,660Активность: |
Если писать изначально - однозначно дефайны. Если уже написаны константы, то переписывать их это бред ИМХО. |
18.01.2012, 15:28 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Oxygen D
Вернулся
offline
Опыт:
5,180Активность: |
клоз. |
18.01.2012, 15:54 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Clamp
Lost in space
offline
Опыт:
71,158Активность: |
разве сжасс значения констант не переписываются при компилляции в коде как дефайны? работает же совершенно одинаково |
18.01.2012, 16:46 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alpha
offline
Опыт:
7,387Активность: |
Oxygen_D:
Использование дэфайнов и констант в такой ситуации может и не оправдано, но если уж делаешь, то делай через дэфайны. Через дэфайны у тебя хоть не будет заниматся та ничтожная часть памяти и не будет лишних байт в файле конечного кода.
Clamp:
Не переводит, также новый адик немного отлаживает лишнего в код.
Вот пример:
нигде не используется, тулзами можно подтереть, конечно, но вся жуть еще глубже - такие функции создаются и время от времени конфликтуют между собой.
(не дезинформация, все подтверждено на практике) test test test
через тулзы, я слышал, константы убераются, адик их наличие игнорирует
Mephissto добавил:
Oxygen_D:
Нинасколько, фактически, только обращение к ним как к переменным занимает некоторые ресурсы, да и для усвоения поиграйте в массивные карты типа DotA. Там использована масса переменных, вот на личном опыте убедитесь.
"Перепись" констант в дэфайны в целом-то полезно скажется, только предпроцессор будет больше требовать ресурсов в момент сохранении карты Отредактировано Mephissto, 18.01.2012 в 18:02. |
18.01.2012, 18:15 | #7
+1/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alexprey
познающий Unity
offline
Опыт:
68,501Активность: |
Mephissto:
What??? |
18.01.2012, 20:46 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Faion
Noblesse Oblige
offline
Опыт:
30,395Активность: |
Сначала подумал что мефисто шарит, но после:
Цитата:
:facepalm: бтв, не помню откуда у меня эта инфа, но согласно этой инфе, константы, поскольку они константы в конечном итоге обрабатываются так же, как дефайны препроцессором, только самой средой. Faion добавил: или мб это делают протекторы, не помню уже. PS: тема неочем и бессмыслена, не на том пытаетесь экономить, учитесь писать алгоритмы нормальные, а не такты экономить. |
|
18.01.2012, 21:02 | #9
+0/−1
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alpha
offline
Опыт:
7,387Активность: |
Faion:
Провел Benchmark тест. Вот результаты:
Величина в секундах.
Характеристики машины говорить не буду, т.к тут все и так ясно. А пример "DotA" я дал хоть и не наилучший, но верный.
Вот карта, в ней описана методика теста. |
||||||||||||
18.01.2012, 21:39 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Elf_Stratigo
offline
Опыт:
4,699Активность: |
пффф, тулза векса подставляет значения в точки обращения, такчто разница только в оформлении |
18.01.2012, 22:30 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alpha
offline
Опыт:
7,387Активность: |
Elf_Stratigo:
Не автоматом же, каждый раз необходимо создавать/подгружать нужную настройку, заменив константы на дэфайны мы не лишний раз подстрахуемся.
В этом случае если констант больше сотни, то их надо заменить. Это существенно сократит конечный код(зависит, конечно, от ситуации, но в большенстве случаев это так), если не произвести обработку внешними программами.
Да и операция замены констант на дэфайны проста. |
18.01.2012, 23:09 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alexprey
познающий Unity
offline
Опыт:
68,501Активность: |
Faion:
чтобы эконосить такты тут надо уже весь двиг вара знать наизусть, а так же иметь представление о процессорах Mephissto: лол что??? ((код jass
define pi_2 bj_PI/2.
constant real pi_2 = bj_PI/2. )) А теперь минус. Дефайн подставит выражение, когда константа уже конкретное значение Mephissto: каким образом. Имхо проводить тест на jass это ерунда, нужно использовать внешнии тулзы для этого Так же у дефайнов нельзя использовать спецификаторы доступа (private, public) Всем константы, посоны! alexprey добавил: Faion: Короче плюсую, насчет бредовости и бессмысленности темы, пожтому лучше закрыть иначе будет холивар Отредактировано alexprey, 19.01.2012 в 01:38. |
19.01.2012, 01:26 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alpha
offline
Опыт:
7,387Активность: |
Ты уверен?)
Я в либрари их все время пишу как приватные
взял в ковычки - исправил дело |
19.01.2012, 02:23 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alexprey
познающий Unity
offline
Опыт:
68,501Активность: |
Mephissto:
А ну тогда ок. |
19.01.2012, 02:25 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
online
Опыт: отключен
|
Дефайны, если нужна производительность. Константы, если нужна обратная совместимость, или в команде есть vjass-еретики.
ScorpioT1000 добавил:
И да, в твоем случае нужна энумерация:
ScorpioT1000 добавил:
это не лишнее, в предпоследней версии вара, если вместо фильтра указать null, будет утечка) |
20.01.2012, 04:21 | #16
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hares
полупротосс
offline
Опыт:
6,966Активность: |
вот пример на vb (можно на любом другом языке)
((код vb
Function Parse(Text as String) as String
Dim i, L as Long: L = Len("constant") For i = 1 to Len(Parse) If Mid(Parse, i, L) = "constant" Then Parse = Left(Parse, i - 1) + "define" + Mid(Parse, i + L + 1) End If Next End Function )) Создаёте текстбокс, вбиваете в него свой код, создаёте кнопку, под конпку пишете ивент. В качестве действия прогоняете текст из текстбокса через эту ф-ию (с заменой) (можно в виде массива строк, так будет быстрее).
Hares добавил: И чё париться-то? |
20.01.2012, 15:44 | #17
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alexprey
познающий Unity
offline
Опыт:
68,501Активность: |
Hares, а вот что парится
((код jass
constant string my_msg = "constant = %1"
)) Применяем твою прогу ((код jass
define string my_msg = "define = %1" )) |
20.01.2012, 17:15 | #18
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
alpha
offline
Опыт:
7,387Активность: |
Ручками все наделал за 8 минут и Ваших супер программ сделанных на vb не надо Отредактировано alpha, 26.03.2012 в 20:17. |
20.01.2012, 17:19 | #19
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Oxygen D
Вернулся
offline
Опыт:
5,180Активность: |
Забыл сказать тему клоз. Написал прогу которая меняет в тексте одно слово на другое. Просто ввел private constant заменить на define. И вуаля, как насчитала моя прога 122 слова были заменеы успешно:) |
24.01.2012, 23:12 | #20
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|