PDA

Просмотр полной версии : [Вопрос] Что лучше new или static



Jeff_Monson
15.03.2014, 20:17
Всем привет, решил добавить несколько систем для своего мода, но не знаю как юзать лучше,

Вопрос что лучше static или new.

static:


static AdminNames[][64] = {
"Неизвестно",
"Мл.Модератор",
"Модератор",
"Гл.Модератор",
"Мл.Администратор",
"Администратор",
"Гл.Администратор",
"Основатель Проекта"
};


new:


new AdminNames[8][64] = {
"Неизвестно",
"Мл.Модератор",
"Модератор",
"Гл.Модератор",
"Мл.Администратор",
"Администратор",
"Гл.Администратор",
"Основатель Проекта"
};


Что же все таки эффективней?

И еще если я буду использовать static то как его лучше использовать?
просто static или static const?


Тут тоже я должен использовать static?


new Float: MaxVehicleSpeed[212] = {
160.00, 160.00, 200.00, 120.00, 150.00, 165.00, 110.00, 170.00, 110.00, 180.00, 160.00,
240.00, 160.00, 160.00, 140.00, 230.00, 155.00, 200.00, 150.00, 160.00, 180.00, 180.00,
165.00, 145.00, 170.00, 200.00, 200.00, 170.00, 170.00, 200.00, 190.00, 130.00, 80.000,
180.00, 200.00, 120.00, 160.00, 160.00, 160.00, 160.00, 160.00, 75.000, 150.00, 150.00,
110.00, 165.00, 190.00, 200.00, 190.00, 150.00, 120.00, 240.00, 190.00, 190.00, 190.00,
140.00, 160.00, 160.00, 165.00, 160.00, 200.00, 190.00, 260.00, 190.00, 75.000, 75.000,
160.00, 160.00, 190.00, 200.00, 170.00, 160.00, 190.00, 190.00, 160.00, 160.00, 200.00,
200.00, 150.00, 165.00, 200.00, 120.00, 150.00, 120.00, 190.00, 160.00, 100.00, 200.00,
200.00, 170.00, 170.00, 160.00, 160.00, 190.00, 220.00, 170.00, 200.00, 200.00, 140.00,
140.00, 160.00, 75.000, 260.00, 260.00, 160.00, 260.00, 230.00, 165.00, 140.00, 120.00,
140.00, 200.00, 200.00, 200.00, 120.00, 120.00, 165.00, 165.00, 160.00, 340.00, 340.00,
190.00, 190.00, 190.00, 110.00, 160.00, 160.00, 160.00, 170.00, 160.00, 60.000, 70.000,
140.00, 200.00, 160.00, 160.00, 160.00, 110.00, 110.00, 150.00, 160.00, 230.00, 160.00,
165.00, 260.00, 160.00, 160.00, 160.00, 200.00, 160.00, 160.00, 165.00, 160.00, 200.00,
170.00, 180.00, 110.00, 110.00, 200.00, 200.00, 200.00, 200.00, 200.00, 200.00, 75.000,
200.00, 160.00, 160.00, 170.00, 110.00, 110.00, 90.000, 60.000, 110.00, 60.000, 160.00,
160.00, 200.00, 110.00, 160.00, 165.00, 190.00, 160.00, 170.00, 120.00, 165.00, 260.00,
200.00, 140.00, 200.00, 260.00, 120.00, 200.00, 200.00, 60.000, 190.00, 200.00, 200.00,
200.00, 160.00, 165.00, 110.00, 200.00, 200.00, 260.00, 260.00, 160.00, 160.00, 160.00,
140.00, 160.00, 260.00
};


Я знаю что если использовать new то при каждом коннекте игрока переменная будет создаваться.
Если использовать static, она создается один раз (я так понял.) Если не прав подправьте.

В каких случаях я должен использовать static?

Deimos от тебя ответ не требуется...

A N D R E Y
15.03.2014, 20:19
Да хотелось-бы тоже узнать, с целью повышения образованности...

Nikoo007
15.03.2014, 20:25
Static отличается от new тем, что static создаётся 1 раз в памяти и остаётся там до завершения программы, а new создаётся каждый раз при вызове функции и очищается по её окончании.
Оптимизации никакой. Ибо если использовать static, в любом случае придётся обнулять её значение, а new это делает автоматически.

- - - Добавлено - - -

Я почти всегда пользуюсь new, а так нужно по ситуации смотреть.

Daniel_Cortez
15.03.2014, 20:44
На эту тему уже есть урок в моём Учебнике (http://pro-pawn.ru/showthread.php?4082).

Ок, обобщу ещё раз.
Локальные переменные:

С помощью ключевого слова new объявляются переменные, которые создаются в стеке и существуют только во время выполнения функции, в которой эти переменные объявлены. Обычно инициализируются нулями (если не указать другого значения).
Через static же объявляются переменные, которые всё время находятся в секции данных. Они не создаются перед и не уничтожаются после выполнения функции. По сути это те же глобальные переменные, но которые доступны только внутри функции, в которой они объявлены. Сохраняют своё значение после предыдущего выполнения функции.

Глобальные переменные:

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