Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 3 из 3
  1. #1
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±

    GetStackSize - узнать размер стека

    Очень простая функция, которая, как понятно из названия, узнаёт размер стека у скрипта.
    1. stock GetStackSize()
    2. { // by Daniel_Cortez (<a href="http://www.pro-pawn.ru" target="_blank">www.pro-pawn.ru</a>)
    3. const BYTES_TO_ADD = (cellbits/charbits);
    4. #emit lctrl 2
    5. #emit move.alt
    6. #emit lctrl 3
    7. #emit sub
    8. #emit add.c BYTES_TO_ADD
    9. #emit retn
    10. return 0;
    11. }



    Полезно, если Вы устали от ложных багрепортов из-за того, что у кого-то не работает RLS и эти кто-то винят во всех его багах Ваш инклуд/плагин.
    В этом случае можно сделать так, чтобы ваша работа просто не запускалась на нубомодах, в которых используется #pragma dynamic - problem solved.
    1. // по умолчанию размер стека - 16384 байта, если больше - использовалась #pragma dynamic
    2. if(GetStackSize() > 16384)
    3. {
    4. print("Noob gamemode detected");
    5. SendRconCommand("exit");
    6. }


    Внимание! Данный способ не будет работать в фильтрскриптах - для них сервер выделяет отдельные секции стека.

    Автор: Daniel_Cortez

    Специально для Pro-Pawn.ru
    Копирование данной статьи на других ресурсах без разрешения автора запрещено.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  2. 14 пользователя(ей) сказали cпасибо:
    #ball (10.11.2014) $continue$ (09.11.2014) codeo (10.11.2014) franked (17.02.2016) L0ndl3m (09.11.2014) Lombardo (09.11.2014) MR_BEN (09.11.2014) Nurick (10.11.2014) Osetin (10.11.2014) Prolific (02.03.2016) Rasta (10.11.2014) Salvacore (09.11.2014) Unreal (09.11.2014) [ForD] (10.11.2014)
  3. #2
    Аватар для DeimoS
    Модератор?

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

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

    Steve Pavlina

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    А если у меня код оптимизирован, но всё равно нужно выделить больше памяти для стека? Например, есть массивы, в которых хранится описание сервера.
    Разбить описание на глобальные строковые переменные длиной до 512 символов (всё равно на больших строках стоковый компилятор крашит), затем скрепить их воедино, как показано здесь.

    Цитата Сообщение от DeimoS Посмотреть сообщение
    Или же просто куча мелких массивов заполнили стек?
    Насколько мелких? И сколько вызовов? Или под "мелкими" имелись в виду массивы по 256 или 512 ячеек, да ещё и в рекурсивной функции, небось? В любом случае это не нормально.
    В реальных же условиях, если грамотно рассчитывать размер локальных массивов и, по возможности, упаковывать данные, будет довольно трудно попасть в ситуацию, в которой не уложишься в 4096 ячеек.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

 

 

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

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

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

Ваши права

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