Почему в pawn нельзя возвращать строку ?
Кто-то говорит на работоспособность кода не влияет , кто-то говорит влияет . Можно об этом написать подробно на след мифе ?
Почему в pawn нельзя возвращать строку ?
Кто-то говорит на работоспособность кода не влияет , кто-то говорит влияет . Можно об этом написать подробно на след мифе ?
Последний раз редактировалось Blood; 28.02.2016 в 11:31.
Хоть я когда-то и сам писал, что нельзя, но всё же можно. Просто нужно учитывать, что если ты, например, два раза подряд вызываешь одну функцию с возвратом, типа:
В стэке выделиться не 25 ячеек (24 ячейки под созданный массив внутри функции с возвратом и 1 ячейка (4 байта) на вызов этой самой функции), а уже 50 ячеек (как если бы мы создали 2 разных массива и записывали в них разные данные для вывода в одном сообщении).PHP код:
main()
{
printf("%s %s", PlayerName(), PlayerName());
}
stock PlayerName()
{
new pname[MAX_PLAYER_NAME] = "Azaza";
return pname;
}
Но, в то же время, если сделать так:
То выделяться будет всё так же 25 ячеек, ибо данные от второй функции перезапишут данные от первой (это лично моё понимание всей ситуации и оно может отличаться определениями от настоящей теоретической части)PHP код:
main()
{
printf("%s", PlayerName());
printf("%s", PlayerName());
}
stock PlayerName()
{
new pname[MAX_PLAYER_NAME] = "Azaza";
return pname;
}
В общем, разница между обычной работой с массивом и возвратом данных из функции заключается в том, что во втором случае ты ещё выделяешь память на вызов этой самой функции
Во всём остальном, по-сути, нет никаких минусов и если тебе действительно нужно возвращать строку - возвращай. Главное не забывай о первом примере, что я дал выше (о том, каким образом такие функции будут кушать память), дабы не словить потом краш из-за переполнения стэка :3
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Blood (28.02.2016)
Всем привет
Поговорим о 4 мифе на ткнулся на соседнем портале: там автор утверждает что команды с использованием params[0],params[1] медленнее чем на переменных
А так же в гугле нашел тест где было показано на оборт что они быстрее переменных но перемены экономят пару байт памяти
а я еще в гугле пишут что
Никогда не создавай переменные в команде кроме переменных типа Float и Массивов. Это способствует не малой нагрузки на Стэк после чего приходится использовать #pragma dynamic
Так вот правда это или все чушь и можно спокойно использовать переменные в командах ?
Последний раз редактировалось wea; 08.03.2016 в 17:58.
а царь то ненастоящий
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
А когда новые выпуски? Жду чем пополнить свои знания.
Раскрой еще один миф:
Использование одного или несколько видов таймеров в моде, их нагрузка и их типы(глобальные по типу SetTimer and цикл на всех игроков или же SetTimerEx по типу индивидуальных таймеров для игрока) их плюсы и минусы
А так-же миф: "Большое количество таймеров в моде - это большая нагрузка"
В последнюю статью о pVar, имхо, стоит добавить объяснение того, где pVar всё же стоит использовать и где они сэкономят память (хоть и тем, что не будет выделение новой).
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Мифы о Pawn-скриптинге - #9
PVar занимает 58 байт, а переменная 4 байта, только вот PVar он как индивидуальный для игрока, а если создать переменную индивидуальную с массивом MAX_PLAYERS то, получается 1000*4 = 4000 байт, (без оператора char).Сообщение от Daniel_Cortez
Тогда получается, что PVar экономней в байтах. Или я не так Вас понял?
Это говорит о том, что под все 800 PVar'ов используется один общий блок памяти на каждого игрока, а значит все утверждения о том, что "PVar можно удалить и он больше не будет занимать место" ошибочны.
Проверим наш вывод. Найдём в файле class_player_var.cpp все случаи использования функций malloc/calloc/free и операторов new/delete.
Никакие функции для динамического выделения памяти там не используются, а new и delete используются только для резервирования/высвобождения места под строку, сохраняемую с помощью SetPVarString.
Остальное содержимое хранится в одном общем для всех 800 PVar'ов блоке памяти, который остаётся зарезервированным на протяжении всего времени нахождения игрока на сервере. Что и требовалось доказать.Это лишь для одного игрока (58 * 800 = ~46400 байт).P.S.: Рассматривалось лишь утверждение про экомию памяти при "создании" и "удалении" PVar'ов (на самом деле память под них резервируется/высвобождается не в SetPVar(Int/Float/String)/DeletePVar, а при подключении/выходе игрока).
P.P.S: Отдельный блок памяти может выделяться под строку при использовании SetPVarString, оно же и высвобождается при вызове DeletePVar, но остальных типов данных и самих PVar'ов это не касается. Как результат, в некоторых случаях может быть целесообразно использование PVar'ов для хранения строк.
В массиве для одного игрока выделяется всего лишь 4 байта, не учитывая char.
Daniel_Cortez (02.10.2016) De_Lay (17.07.2016)
Связаться со мной в VK можно через личные сообщения этой группы
Заказы не принимаю
Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
Великих идей полно, на них нет спроса.
Воплощение идеи в законченную игру требует долгой работы,
таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
Предложить идею просто, воплотить – вот в чём проблема
Steve Pavlina
Unreal (17.07.2016)
Эту тему просматривают: 4 (пользователей: 0 , гостей: 4)