Сообщение от
DeimoS
И давайте не будем сейчас путать "как правильно" с "как мне удобно". Люди спросили именно о первом и ни к чему сейчас полемику устраивать.
А то, что гораздо легче пойти и ограбить какую-нибудь старушку, чем самому заработать - это да, не поспоришь. Но, опять же, правильно ли это? Не думаю.
А с каких ты решаешь "как правильно"? Есть два варианта способных на жизнь, и какой из них "правильный" - каждый решает для себя сам. Ты сейчас утверждаешь "как тебе удобнее" - поэтому твои слова, ничем не отличаются от моих слов.
Сообщение от
DeimoS
Выше сказано лишь то, что кто-то не разбирается в поставленном вопросе и делает из этого какие-то выводы (особенно забавно читать про "захлёбывание" было). Про все "крупные геймплеи" говорить бессмысленно, ибо достаточно взглянуть на остальной код, чтоб понять как они написаны (и речь не о том, что авторы плохие и написали всё плохо, а о том, что эти скрипты начинали писаться очень давно и тогда о подобном особо не думали (чтоб это понять, достаточно лишь на официальный форум зайти и почитать темы ~2010 года. Там и stock быстрее pubic, и массивы лучше объявлять в 512 ячеек. а не 1024, ибо это оптимизированнее, и много всего ещё весёлого, от чего потом долгое время избавлялись на этом форуме). Не всегда "крупное" означает "хорошо написанное". Смотреть нужно не на написанные моды, а на теорию, в которой объясняется принцип работы. И уже исходя из этого делать выводы). А тебя я хочу поздравить с тем, что ты потратил в 3 раза больше памяти (ну или сколько у тебя массивов) и получил из этого ровным счётом ни-че-го хорошего. Ну кроме упоения своей лени.
Какие к черту в 3 раза больше памяти? Добавление памяти напрямую в сегмент данных, эквивалентно добавлению памяти к стэку. Я не потрачу лишней памяти. Лишняя память будет уходить в твоем случае (по скольку память придется выделять под каждую новую букву). А память из стэка будет более рациональна использована.
Какие к черту "старые моды"? В старых модах, наоборот таки, использовался твой вариант с локальным массивом на все случае жизни, только они, как правило, ничего не считали и выделяли везде 256 ячеек. Я говорю про современные моды, сегодняшних гигантов, открой исходники гамбита и что мы там увидим? Мой вариант, который я предлагал выше:
PHP код:
new
g_small_string [ 256 ],
g_string [ 1024 ],
g_big_string [ 2048 ];
Конечно, тут абсурдная трата памяти, но чем не вариант.
Сообщение от
DeimoS
Серьёзно. Ты тут не на сервер поиграть зашёл, а пишешь скрипты. И "тяп-ляп" делать не получится. Очень многое в программировании придумано для того, чтоб тебя обезопасить от лишних ошибок. Тот же Pawn, на котором ты пишешь, для того и был придуман.
И никто не называет это главным плюсом. Используя локальные массивы, ты, как минимум:
1) Не тратишь лишнюю память в сегменте данных (а стэк, я напомню, является лишь частью этого сегмента данных и выделенная под стэк память никуда не исчезнет, если вы не будете его использовать)
2) Делаешь код логичнее и читабельнее (по инициализации видно, что дальше в коде используется массив на такое-то количество ячеек)
3) Как я уже писал ранее, избавляешься от возможности допустить ошибку (мной описанный случай - не единственный. Так же можно не обнулить массив, например, где-нибудь в цикле, в котором идёт форматирование и на выходе получить кашу из текста при многократном использовании кода). В перспективе это сэкономит в разы больше времени, нежели если ты будешь тратить на подсчёт и объявление этого массива
Не буду говорить лишних слов, просто прокомментирую "плюсы" которые ты назвал:
1) А стэк не находится в сегменте данных? Ты тратишь такую же память сегмента данных, только выделенную под стэк, при этом потратишь еще больше, добавляя памяти в стэк. И кажется, я уже об этом говорил. На всякий случае повторю, что способ с локальных массивами в итоге потратит намного больше памяти, чем 2 - 3 массива на все случае. Думаю говорить почему не нужно, да?
2) Когда код засорен инициализацией нового массива при каждом формате - такая себе логичность и читабельность. А если у тебя есть выделенный под формат отдельный массив, и назван подобающе - ты сразу понимаешь почему и зачем. И для этого не нужно овер999 массивов в одном участке кода.
3) Если ты единственный разработчик геймплея - еще один сомнительный "плюс", если разработчиков много - я говорил выше, что в таких модах нужно писать автономные участки кода, что бы скриптеру не приходилось собирать одну систему из всего мода. Но таких модов нет, ведь все моды пишутся "для себя", как правило, одним человеком.
Сообщение от
DeimoS
А теперь прочти тему до конца, если не понимаешь как работают эти самые массивы, и пойми, что если ты не создашь однажды массив в 4к ячеек, ничто не "захлебнётся". Хотя, если судить по написанному тобой, складывается впечатление, что ты не очень сильно паришься по поводу того, как написан твой код и какова его структура. С таким подходом да, у тебя там всё рано или поздно захлебнётся.
Да и повторю ещё раз: стэк - тот же глобальный массив. От того, что ты увеличишь его, ничего не изменится и хуже не станет. Уж лучше прибавить немного к стэку и использовать прошлые 4к ячеек, что были в нём, чем создавать ещё один массив, выделяя дополнительные 4к ячеек.
На минуту отвлекусь и замечу, что здесь ты все правильно сказал, что разницы про использование методов не будет, а дальше ты говорил абсурдные вещи. Довольно странно. Но опять же, замечу в третий раз, что твой способ в итоге потратит больше памяти, нежели мой. причем разница будет существенная, но сейчас не об этом. "захлебнеться" я сказал потому, что в таком моде через каждую строчку будет инициализироваться очередной массив, чтобы, например, отправить в чат "Приветствую тебя на моей сервера ...".