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

Реклама


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

    Статус
    Оффлайн
    Регистрация
    04.02.2015
    Адрес
    Ташкент епта
    Сообщений
    10
    Репутация:
    0 ±

    pawn.cfg с ключом -v2. Заинтересовало

    Приветствую вас,скриптеры! У меня к вам вопрос,по поводу информации о компиляции.

    В общем у меня есть диалоги,которые я перебираю свитчем,ну в общем не в этом суть,и там в определенном кейсе,создаю локальную переменную,выглядит это примерно так:
    PHP код:
    case dTest:
    {
        static const 
    msg[] = "Тут текст диалогового окна, и сюда %s попадет еще текст потом,после форматирования";
        new 
    str[sizeof(msg)+113];//ПРО ЭТУ ЛОКАЛЬНУЮ ПЕРЕМЕННУЮ ПОЙДЕТ РЕЧЬ
        
    format(strsizeof(str), msgПОДСТАВЛЯЮ_ДАННЫЕ);//Отформатировали к примеру
        
    return ShowPlayerDialog(playeriddTestDIALOG_STYLE_MSGBOX"Заголовок"str"Да""Нет");

    И после компиляции,мне выводится:
    PHP код:
    Header size:           2104 bytes
    Code size
    :            53352 bytes//Обратите внимание - 53352 байта
    Data size:            79980 bytes//Обратите внимание - 79980 байтов
    Stack/heap size:      16384 bytesestimated maxusage=968 cells (3872 bytes)//Обратите внимание - 968 ячеек
    Total requirements:  151820 bytes 
    И просто ради интереса,для теста,я переменную new str[sizeof(msg)+113]; переименовал так: static str[sizeof(msg)+113];
    И вот что из этого вышло:

    PHP код:
    Header size:           2104 bytes
    Code size
    :            53316 bytes//Здесь уменьшилось на 36 байтов
    Data size:            81848 bytes //А здесь уже увеличилось на 1868 байтов
    Stack/heap size:      16384 bytesestimated maxusage=915 cells (3660 bytes)//Обратите внимание,уже - 915 ячеек и 3660 байтов
    Total requirements:  153652 bytes 
    И получается,что мне от части выгоднее юзать static str[sizeof(msg)+113];, нежели new str[sizeof(msg)+113]; ? Или я не особо понял про эту информацию (имею в виду,инфу,что выводится при компиляции).

    Просто,я читал вообще про оператор static. Там было сказано,что он как бы изменяет пределы видимости переменной. Т.е если я пишу это в инклюде (что я как раз и делаю),то в других местах я до нее не дотянусь (хотя она у меня и так локальна).

    В общем,написав данный пост, у меня появились такие вопросы:

    1) Почему,если написав new выделяется больше байтов в стэке и ячеек?
    2) Как вообще здесь будет правильней? Использовать new или как раз этот static?
    3) Если можно,объясните вообще про Header size,Code Size,Data Size,Stack. Я вообще как-то читал статью про это,но все равно особо не догоняю. Было бы не плохо объяснить по проще про эти дела..

    За ранее большое спасибо!
    Последний раз редактировалось franked; 19.02.2016 в 15:27.

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

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    607
    Репутация:
    289 ±
    1. У оператора static есть несколько свойств: во-первых, с помощью него вы можете произвести инкапсуляцию переменной, т.е. её область видимости будет только в одном файле; во-вторых, встраивая данную переменную в функцию, значение данной переменной не будет сброшено при повторном запуске функции, т.к. значение данной переменной попадает в сегмент данных.
    2. В первом примере вы все равно занесли строку в сегмент данных, после чего, соответственно, измерили её. Вы можете и не использовать оператор static, и, конечно, вы лишитесь не только подсчитанного массива, но и производительности (не всегда).
    3. Code Size – размер сегмента кода. В данном сегменте хранятся команды на языке машинных кодов.
      Data Size – размер сегмента данных (статических). Статические переменные, которые инициализируются ещё до включения процесса в работу. Данные переменные существуют все время, и сегмент очищается только после выключения сервера.
      Stack Size – размер сегмента стека. В данном сегменте хранятся локальные переменные, а также адреса возврата из функции.
      Heap Size – размер сегмента кучи. С помощью данного сегмента вы можете выделить динамическую память.
      Более детальную информацию вы можете почитать здесь.


    Цитата Сообщение от franked Посмотреть сообщение
    И получается,что мне от части выгоднее юзать static str[sizeof(msg)+113];, нежели new str[sizeof(msg)+113]; ? Или я не особо понял про эту информацию (имею в виду,инфу,что выводится при компиляции).
    Если вы хотите всегда хранить значения в массиве, то да, но в данной ситуации этого не нужно.
    Последний раз редактировалось VVWVV; 19.02.2016 в 17:40.

  3. Пользователь сказал cпасибо:
    franked (19.02.2016)
 

 

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

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

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

Ваши права

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