Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 7 из 8 ПерваяПервая ... 5 6 7 8 ПоследняяПоследняя
Показано с 61 по 70 из 73
  1. #61
    Аватар для Blood
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.12.2013
    Сообщений
    69
    Репутация:
    2 ±
    Почему в pawn нельзя возвращать строку ?
    Кто-то говорит на работоспособность кода не влияет , кто-то говорит влияет . Можно об этом написать подробно на след мифе ?
    Последний раз редактировалось Blood; 28.02.2016 в 11:31.

  2. #62
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Blood Посмотреть сообщение
    Почему в pawn нельзя возвращать строку ?
    Кто-то говорит на работоспособность кода не влияет , кто-то говорит влияет . Можно об этом написать подробно на след мифе ?
    Хоть я когда-то и сам писал, что нельзя, но всё же можно. Просто нужно учитывать, что если ты, например, два раза подряд вызываешь одну функцию с возвратом, типа:
    PHP код:
    main()
    {
        
    printf("%s %s"PlayerName(), PlayerName());
    }
    stock PlayerName()
    {
        new 
    pname[MAX_PLAYER_NAME] = "Azaza";
        return 
    pname;

    В стэке выделиться не 25 ячеек (24 ячейки под созданный массив внутри функции с возвратом и 1 ячейка (4 байта) на вызов этой самой функции), а уже 50 ячеек (как если бы мы создали 2 разных массива и записывали в них разные данные для вывода в одном сообщении).
    Но, в то же время, если сделать так:
    PHP код:
    main()
    {
        
    printf("%s"PlayerName());
        
    printf("%s"PlayerName());
    }
    stock PlayerName()
    {
        new 
    pname[MAX_PLAYER_NAME] = "Azaza";
        return 
    pname;

    То выделяться будет всё так же 25 ячеек, ибо данные от второй функции перезапишут данные от первой (это лично моё понимание всей ситуации и оно может отличаться определениями от настоящей теоретической части)

    В общем, разница между обычной работой с массивом и возвратом данных из функции заключается в том, что во втором случае ты ещё выделяешь память на вызов этой самой функции
     ©
    4 байта - адрес паблика, извлекается через funcidx
    4 байта - кол-во аргументов, извлекается через numargs
    4 байта - адрес кода, откуда был вызван паблик (иначе говоря, backtrace)
    0..256 байт - аргументы (макс 32), собсна читаются прямо из стека

    Во всём остальном, по-сути, нет никаких минусов и если тебе действительно нужно возвращать строку - возвращай. Главное не забывай о первом примере, что я дал выше (о том, каким образом такие функции будут кушать память), дабы не словить потом краш из-за переполнения стэка :3
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  3. Пользователь сказал cпасибо:
    Blood (28.02.2016)
  4. #63
    Аватар для wea
    Пользователь

    Статус
    Оффлайн
    Регистрация
    26.01.2016
    Сообщений
    31
    Репутация:
    1 ±
    Всем привет
    Поговорим о 4 мифе на ткнулся на соседнем портале: там автор утверждает что команды с использованием params[0],params[1] медленнее чем на переменных
    А так же в гугле нашел тест где было показано на оборт что они быстрее переменных но перемены экономят пару байт памяти
    а я еще в гугле пишут что
    Никогда не создавай переменные в команде кроме переменных типа Float и Массивов. Это способствует не малой нагрузки на Стэк после чего приходится использовать #pragma dynamic
    Так вот правда это или все чушь и можно спокойно использовать переменные в командах ?
    Последний раз редактировалось wea; 08.03.2016 в 17:58.
    а царь то ненастоящий

  5. #64
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от wea Посмотреть сообщение
    Всем привет
    Поговорим о 4 мифе на ткнулся на соседнем портале: там автор утверждает что команды с использованием params[0],params[1] медленнее чем на переменных
    Именно это (и не только) и было доказано в моих статьях.


    Цитата Сообщение от wea Посмотреть сообщение
    А так же в гугле нашел тест где было показано на оборт что они быстрее переменных но перемены экономят пару байт памяти
    а я еще в гугле пишут что
    Никогда не создавай переменные в команде кроме переменных типа Float и Массивов. Это способствует не малой нагрузки на Стэк после чего приходится использовать #pragma dynamic
    А вот на это можно ссылки?


    Цитата Сообщение от wea Посмотреть сообщение
    Так вот правда это или все чушь и можно спокойно использовать переменные в командах ?
    Верить голословным утверждениям (каковыми и являются 99% всех утверждений, особенно на всяких г-и) или статьям, подкреплённым доказательствами? Не знаю, вам решать.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. #65
    Аватар для MrJu[N]ior
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.02.2016
    Сообщений
    5
    Репутация:
    3 ±
    А когда новые выпуски? Жду чем пополнить свои знания.

  7. #66
    Аватар для Rodrigo
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.09.2014
    Сообщений
    11
    Репутация:
    4 ±
    Раскрой еще один миф:

    Использование одного или несколько видов таймеров в моде, их нагрузка и их типы(глобальные по типу SetTimer and цикл на всех игроков или же SetTimerEx по типу индивидуальных таймеров для игрока) их плюсы и минусы
    А так-же миф: "Большое количество таймеров в моде - это большая нагрузка"

  8. 2 пользователя(ей) сказали cпасибо:
    kushichka (16.07.2016) Unreal (17.07.2016)
  9. #67
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    В последнюю статью о pVar, имхо, стоит добавить объяснение того, где pVar всё же стоит использовать и где они сэкономят память (хоть и тем, что не будет выделение новой).
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  10. 2 пользователя(ей) сказали cпасибо:
    De_Lay (17.07.2016) Geebrox (15.07.2016)
  11. #68
    Аватар для De_Lay
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.06.2016
    Сообщений
    16
    Репутация:
    1 ±
    Мифы о Pawn-скриптинге - #9


    Цитата Сообщение от Daniel_Cortez
    58 байт занимает каждый PVar. Для сравнения, обычная переменная в Pawn занимает всего 4 байта.
    PVar занимает 58 байт, а переменная 4 байта, только вот PVar он как индивидуальный для игрока, а если создать переменную индивидуальную с массивом MAX_PLAYERS то, получается 1000*4 = 4000 байт, (без оператора char).
    Тогда получается, что PVar экономней в байтах. Или я не так Вас понял?

  12. #69
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от oSg Посмотреть сообщение
    Мифы о Pawn-скриптинге - #9




    PVar занимает 58 байт, а переменная 4 байта, только вот PVar он как индивидуальный для игрока, а если создать переменную индивидуальную с массивом MAX_PLAYERS то, получается 1000*4 = 4000 байт, (без оператора char).
    Тогда получается, что PVar экономней в байтах. Или я не так Вас понял?
    Это говорит о том, что под все 800 PVar'ов используется один общий блок памяти на каждого игрока, а значит все утверждения о том, что "PVar можно удалить и он больше не будет занимать место" ошибочны.

    Проверим наш вывод. Найдём в файле class_player_var.cpp все случаи использования функций malloc/calloc/free и операторов new/delete.
    Никакие функции для динамического выделения памяти там не используются, а new и delete используются только для резервирования/высвобождения места под строку, сохраняемую с помощью SetPVarString.
    Остальное содержимое хранится в одном общем для всех 800 PVar'ов блоке памяти, который остаётся зарезервированным на протяжении всего времени нахождения игрока на сервере. Что и требовалось доказать.
    P.S.: Рассматривалось лишь утверждение про экомию памяти при "создании" и "удалении" PVar'ов (на самом деле память под них резервируется/высвобождается не в SetPVar(Int/Float/String)/DeletePVar, а при подключении/выходе игрока).
    P.P.S: Отдельный блок памяти может выделяться под строку при использовании SetPVarString, оно же и высвобождается при вызове DeletePVar, но остальных типов данных и самих PVar'ов это не касается. Как результат, в некоторых случаях может быть целесообразно использование PVar'ов для хранения строк.
    Это лишь для одного игрока (58 * 800 = ~46400 байт).

    В массиве для одного игрока выделяется всего лишь 4 байта, не учитывая char.

  13. 2 пользователя(ей) сказали cпасибо:
    Daniel_Cortez (02.10.2016) De_Lay (17.07.2016)
  14. #70
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Это лишь для одного игрока (58 * 800 = ~46400 байт).

    В массиве для одного игрока выделяется всего лишь 4 байта, не учитывая char.
    Только ты не забывай, что, даже если ты не будешь использовать ни одного pVar, память под них всё равно выделится, хочешь ты этого или нет
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  15. Пользователь сказал cпасибо:
    Unreal (17.07.2016)
 

 
Страница 7 из 8 ПерваяПервая ... 5 6 7 8 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •