Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.

Реклама


**Как получить V.I.P** (Перейти)
Чтобы заказать рекламу на Pro-Pawn.Ru, обращайтесь в Skype.
Баннерная реклама 200руб/мес, Текстовая 100руб/мес.
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 12
  1. #1
    Аватар для 1lyad
    Пользователь

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

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

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

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

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

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

    Что мешает просто увеличить размер стека с помощью #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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Цитата Сообщение от 1lyad Посмотреть сообщение
    Стэк-то еще не переполнен, да и вообще, раз учусь программировать в PAWN, то надо бы делать это правильно, верно же?
    Так вот, собственно вопрос, почему в стэке не увеличивается свободное место?

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

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

    Широко известно, что идеи стоят 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
    Адрес
    Восточный Мордор
    Сообщений
    3,931
    Репутация:
    1502 ±
    Цитата Сообщение от 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]
    Связаться со мной можно в личных сообщениях этой группы

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

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

    Steve Pavlina

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

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

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

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

 

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

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

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

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

Ваши права

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