Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 10 из 12
  1. #1
    Аватар для 1lyad
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.09.2016
    Сообщений
    20
    Репутация:
    1 ±

    Как происходит подсчёт памяти для стэка?

    Собственно, сабж заключается в следующем, у меня компилятор всегда выводит, что стэк забит ровно в 4011 ячеек [16044 байт], чтобы я ни делал. Если увеличивать массив в 100500, для примера, он выводит информацию, что стэк забит больше, чем 4011 ячеек. (логично)
    В общем, сидел "оптимизировал" эти стринги, находил всех их в notepad++, и измерял размеры сообщений, короче говоря, парни, наведите на что-нибудь толковое об этом гребаном стэке, почему он не меняется в отрицательную сторону, пробовал полностью удалять пару пабликов, тоже самое, я занимаюсь этим буквально недавно, подкиньте статей чтоль, какие переменные вообще занимают стэк, тд. тп.

    Заранее благодарен.

  2. #2
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Локальные массивы могут занимать большую часть стека.

    Что мешает просто увеличить размер стека с помощью #pragma dynamic?

  3. Пользователь сказал cпасибо:
    1lyad (11.09.2016)
  4. #3
    Аватар для 1lyad
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.09.2016
    Сообщений
    20
    Репутация:
    1 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    Что мешает просто увеличить размер стека с помощью #pragma dynamic?
    Стэк-то еще не переполнен, да и вообще, раз учусь программировать в PAWN, то надо бы делать это правильно, верно же?
    Так вот, собственно вопрос, почему в стэке не увеличивается свободное место?

    UPD: Меня вообще интересует вопрос: "Правильно ли показывает он занятость стэка?", потому что как я описал выше, при изменении тех же самых стрингов, эта цифра вообще не меняется, уже который день, вот и мучаю себя вопросами, может я что-то не так делаю, или может в коде где-то ошибка?
    Последний раз редактировалось 1lyad; 11.09.2016 в 01:26.

  5. #4
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от 1lyad Посмотреть сообщение
    Стэк-то еще не переполнен, да и вообще, раз учусь программировать в PAWN, то надо бы делать это правильно, верно же?
    Так вот, собственно вопрос, почему в стэке не увеличивается свободное место?

    UPD: Меня вообще интересует вопрос: "Правильно ли показывает он занятость стэка?", потому что как я описал выше, при изменении тех же самых стрингов, эта цифра вообще не меняется, уже который день, вот и мучаю себя вопросами, может я что-то не так делаю, или может в коде где-то ошибка?
    Компилятор, при подсчёте размера памяти, занимаемой в стеке, учитывает не все локальные переменные в скрипте, а каждый коллбэк отдельно. И уже выводит информацию из того коллбэка, где памяти потребляется больше всего.
    То бишь, если в OnPlayerConnect у тебя затрачивается 1000 байт, а в OnPlayerSpawn 1100, компилятор покажет не 2100, а 1100.

    P.S. Переименовал тему и перенёс её в подходящий раздел
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  6. Пользователь сказал cпасибо:
    1lyad (11.09.2016)
  7. #5
    Аватар для 1lyad
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.09.2016
    Сообщений
    20
    Репутация:
    1 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Компилятор, при подсчёте размера памяти, занимаемой в стеке, учитывает не все локальные переменные в скрипте, а каждый коллбэк отдельно. И уже выводит информацию из того коллбэка, где памяти потребляется больше всего.
    То бишь, если в OnPlayerConnect у тебя затрачивается 1000 байт, а в OnPlayerSpawn 1100, компилятор покажет не 2100, а 1100.

    P.S. Переименовал тему и перенёс её в подходящий раздел
    Спасибо за пояснение, только вот как определить где сколько используется, и не много ли это, 16 тысяч байт?

  8. #6
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от 1lyad Посмотреть сообщение
    Спасибо за пояснение, только вот как определить где сколько используется
    Как-то так
    PHP код:
    public OnGameModeInit()
    {
        new 
    heap heapspace();
        
    printf("OnGameModeInit() STK %d"heap);

        
    // тут остальной код

        
    printf("OnGameModeInit() STK %d (%d LOSS)"heapspace(), (heap heapspace()));
        return 
    1;

    Цитата Сообщение от 1lyad Посмотреть сообщение
    и не много ли это, 16 тысяч байт?
    1 килобайт = 1024 байт
    1 мегабайт = 1024 килобайт
    1 гигабайт = 1024 мегабайт

    Следовательно:
    1 гигабайт = 1024*1024*1024 = 1_073_741_824 байт.
    1073741824 / 16384 = 65536 раз наш стэк может поместиться в один гигабайт.

    [SARCASM]Много это или мало - кто ж его знает[/SARCASM]
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  9. Пользователь сказал cпасибо:
    1lyad (11.09.2016)
  10. #7
    Аватар для 1lyad
    Пользователь

    Статус
    Оффлайн
    Регистрация
    10.09.2016
    Сообщений
    20
    Репутация:
    1 ±
    Хорошо, шутки шутками, а если серьёзно, почему тогда #pragma dynamic не рекомендуется использовать, или, перефразирую, почему моды с #pragma dynamic считаются "Noob gamemode"? http://pro-pawn.ru/showthread.php?10...B5%D0%BA%D0%B0

  11. #8
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от 1lyad Посмотреть сообщение
    Хорошо, шутки шутками, а если серьёзно, почему тогда #pragma dynamic не рекомендуется использовать, или, перефразирую, почему моды с #pragma dynamic считаются "Noob gamemode"? http://pro-pawn.ru/showthread.php?10...B5%D0%BA%D0%B0
    Потому что, в теории, 16384 байт, которые выделяются для стека по умолчанию, должно хватить для всех нужд, что могут быть в SA-MP. В большинстве случаев, когда используют "pragma dynamic", директива используется не потому, что написанная система требует большего числа памяти, чем есть, а потому что скриптер ленился адекватно работать с памятью, выделяя рандомное число ячеек и т.п. Если память не используется => её выделять бессмысленно. А если ты делаешь то, что бессмысленно, назвать тебя профессионалом, а твою работу качественной, ну никак нельзя.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

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

    Steve Pavlina

  12. 2 пользователя(ей) сказали cпасибо:
    1lyad (11.09.2016) Saibot (12.09.2016)
  13. #9
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    А большие массивы можно объявлять с помощью static, тогда этот массив не будет занимать стек, но не стоит забывать о том, что данные в этой переменной после повторного вызова функции не обнуляются.

  14. Пользователь сказал cпасибо:
    1lyad (11.09.2016)
  15. #10
    Аватар для vovandolg
    Пользователь

    Статус
    Оффлайн
    Регистрация
    17.11.2015
    Адрес
    Stavropol
    Сообщений
    1,369
    Репутация:
    113 ±
    Цитата Сообщение от ziggi Посмотреть сообщение
    А большие массивы можно объявлять с помощью static, тогда этот массив не будет занимать стек, но не стоит забывать о том, что данные в этой переменной после повторного вызова функции не обнуляются.
    А если static const, такая же схема или по другому как то?
    [Anticheat]___Invisible Fly Hack
    [Anticheat]____Weapon/Ammo Hack
    [Function]______ResetPlayerWeaponSlot
    [Function]_______FIX_SetPlayerAmmo
    [ServerMod]______TDM | Zombie Apokalypse

 

 
Страница 1 из 2 1 2 ПоследняяПоследняя

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

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

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

Ваши права

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