Re: Оптимизация кода -
Stepashka - 26.03.2013
Quote:
Originally Posted by XemyL
Ещё вопрос в догонку.)
Один человек утверждает что:
"При вызове функции с содержанием локальной переменной создаётся её копия
stock tt() { new tt = 1; printf( "%d", tt ) ; }
То при каждом вызове
Создаст копию tt
И займёт память в стеке"
Серьёзно?
|
Нет, каждый раз переменная создается, а потом уничтожается.
Re: Оптимизация кода -
AirKite - 26.03.2013
Quote:
Originally Posted by Stepashka
при его достижении 800Mb сервер не запустится
|
Ну это уже извращения... Но тем не менее, на машине сервера были свободны 800 метров? Что ему мешает запустится неизвестно?
Re: Оптимизация кода -
Slava[LSW] - 27.03.2013
Еще вопрос: допустим, есть глобальный массив с координатами машин.
new Float:vCoords[60][4] = {
{0.0,0.0,0.0,0.0},
..........
};
И в OnGameModeInit циклом создаются тачки и, допустим, сфера к ним. Координаты берутся из этого масива естественно.
for(new i=0;i<60;i++)
{
vID[i] = CreateVehicle(520, vCoords[i][0], vCoords[i][1], vCoords[i][2], vCoords[i][3], -1, -1, 3600);
CreateDynamicSphere(vCoords[i][0], vCoords[i][1], vCoords[i][2], 80.0);
}
и далее этот массив в моде нигде не используется. Что лучше, оставить как есть или создать этот массив в OnGameModeinit?
Или вообще, не создавать его а просто напихать дофига строчек с созданием?
Re: Оптимизация кода -
NameNone - 27.03.2013
Quote:
Originally Posted by Slava[LSW]
Еще вопрос: допустим, есть глобальный массив с координатами машин.
new Float:vCoords[60][4] = {
{0.0,0.0,0.0,0.0},
..........
};
И в OnGameModeInit циклом создаются тачки и, допустим, сфера к ним. Координаты берутся из этого масива естественно.
for(new i=0;i<60;i++)
{
vID[i] = CreateVehicle(520, vCoords[i][0], vCoords[i][1], vCoords[i][2], vCoords[i][3], -1, -1, 3600);
CreateDynamicSphere(vCoords[i][0], vCoords[i][1], vCoords[i][2], 80.0);
}
и далее этот массив в моде нигде не используется. Что лучше, оставить как есть или создать этот массив в OnGameModeinit?
Или вообще, не создавать его а просто напихать дофига строчек с созданием?
|
Протестировал на локале, особой разницы не уловил. Пусть всевышние отпишутся.
Re: Оптимизация кода -
raider19rus - 27.03.2013
Quote:
Originally Posted by Slava[LSW]
Еще вопрос: допустим, есть глобальный массив с координатами машин.
new Float:vCoords[60][4] = {
{0.0,0.0,0.0,0.0},
..........
};
И в OnGameModeInit циклом создаются тачки и, допустим, сфера к ним. Координаты берутся из этого масива естественно.
for(new i=0;i<60;i++)
{
vID[i] = CreateVehicle(520, vCoords[i][0], vCoords[i][1], vCoords[i][2], vCoords[i][3], -1, -1, 3600);
CreateDynamicSphere(vCoords[i][0], vCoords[i][1], vCoords[i][2], 80.0);
}
и далее этот массив в моде нигде не используется. Что лучше, оставить как есть или создать этот массив в OnGameModeinit?
Или вообще, не создавать его а просто напихать дофига строчек с созданием?
|
Лучше не создавать массив, а
"просто напихать дофига строчек с созданием".
Re: Оптимизация кода -
Stepashka - 27.03.2013
Quote:
Originally Posted by AirKite
Ну это уже извращения... Но тем не менее, на машине сервера были свободны 800 метров? Что ему мешает запустится неизвестно?
|
Так собственно я извращениями и занимался. Были. Ну наверно размер, о чем добросовестно мне сказал сервер фразой: AMX file is too big. (Дословно уже не помню)
Re: Оптимизация кода -
Xotab - 27.03.2013
Вопрос: если размер массива не влияет на стек, тогда что на него влияет?
Re: Оптимизация кода -
Slava[LSW] - 27.03.2013
Глобальные массивы не влияют на стек, а локальные влияют.
Re: Оптимизация кода -
AirKite - 27.03.2013
Quote:
Originally Posted by Xotab
Вопрос: если размер массива не влияет на стек, тогда что на него влияет?
|
Дело не в размере. И вообще на стек разумеется влияет всё, под что он выделяется. Стек можно переполнить без единого массива и наоборот. Об этом уже было сказано Over 9000 раз...
http://ru.wikipedia.org/wiki/Стек
http://ru.wikipedia.org/wiki/Переполнение_стека
По ссылкам выше многое можно понять.
Re: Оптимизация кода -
OKStyle - 30.03.2013
Ребят, рассудите. Есть конструкция:
pawn Code:
stock Blablabla(args...)
{
#define param amout
... // blablabla
return 1;
#undef param
}
Компилятор варна не выдал. Что такая конструкция должна делать? Сработает ли она? И на каком этапе? А то запутались мы.
Re: Оптимизация кода -
AirKite - 30.03.2013
Quote:
Originally Posted by OKStyle
Ребят, рассудите. Есть конструкция:
pawn Code:
stock Blablabla(args...) { #define param amout ... // blablabla return 1; #undef param }
Компилятор варна не выдал. Что такая конструкция должна делать? Сработает ли она? И на каком этапе? А то запутались мы.
|
А что собственно рассудить? Кроме #define и #undef я ничего не вижу. Они и интересуют? #define задаёт макрос, #undef очищает его. т.е. между #define param amout и #undef param, param заменяется на amout. Всё что ниже #undef param уже не будет работать как описал выше.
Re: Оптимизация кода -
Alexander_Petrov - 30.03.2013
Quote:
Originally Posted by AirKite
А что собственно рассудить? Кроме #define и #undef я ничего не вижу. Они и интересуют? #define задаёт макрос, #undef очищает его. т.е. между #define param amout и #undef param, param заменяется на amout. Всё что ниже #undef param уже не будет работать как описал выше.
|
undef после return.
Re: Оптимизация кода -
Fireline - 30.03.2013
Quote:
Originally Posted by Alexander_Petrov
undef после return.
|
а что, директивы вообще обращают внимания на скобки и то что вокруг? Нет конечно. И даже так можно
pawn Code:
stock some()
{
#if TEST
return 12;
#else
return 11;
#endif
}
Re: Оптимизация кода -
Alexander_Petrov - 30.03.2013
delt
Re: Оптимизация кода -
OKStyle - 31.03.2013
Можно ли как-то задефайнить часть константы? Например:
Есть список дефайнов цветов в скрипте вида BK_COLOR, в новой версии инклюда поменялся префикс на BG. Чтобы после компиляции осталась обратная совместимость, решили ввести такой дефайн:
pawn Code:
#if defined BK_BLACK
#define BK_BLACK BG_BLACK
#endif
Но так надо для каждого цвета писать. Можно ли как-то сделать нечто подобное:
pawn Code:
#if defined BK_
#define BK_ BG_
#endif
Re: Оптимизация кода -
Stepashka - 31.03.2013
Quote:
Originally Posted by OKStyle
Можно ли как-то задефайнить часть константы? Например:
Есть список дефайнов цветов в скрипте вида BK_COLOR, в новой версии инклюда поменялся префикс на BG. Чтобы после компиляции осталась обратная совместимость, решили ввести такой дефайн:
pawn Code:
#if defined BK_BLACK #define BK_BLACK BG_BLACK #endif
Но так надо для каждого цвета писать. Можно ли как-то сделать нечто подобное:
pawn Code:
#if defined BK_ #define BK_ BG_ #endif
|
А что говорит эксперимент?
Re: Оптимизация кода -
BJIADOKC - 27.08.2013
Quote:
Originally Posted by OKStyle
Можно ли как-то задефайнить часть константы? Например:
Есть список дефайнов цветов в скрипте вида BK_COLOR, в новой версии инклюда поменялся префикс на BG. Чтобы после компиляции осталась обратная совместимость, решили ввести такой дефайн:
pawn Code:
#if defined BK_BLACK #define BK_BLACK BG_BLACK #endif
Но так надо для каждого цвета писать. Можно ли как-то сделать нечто подобное:
pawn Code:
#if defined BK_ #define BK_ BG_ #endif
|
дак может наоборот, дефайнить новый BG_ как старый BK_ ? Ты немножко запутался.
pawn Code:
#if defined BK_
#define BG_ BK_
#endif
Re: Оптимизация кода -
Xotab - 18.11.2013
Quote:
Originally Posted by Stepashka
не пишите сложных запросов.
|
Запрос UPDATE с одновременным обновлением 100 столбцов по 1 строке будет сложным?
Re: Оптимизация кода -
Stepashka - 18.11.2013
Quote:
Originally Posted by Xotab
Запрос UPDATE с одновременным обновлением 100 столбцов по 1 строке будет сложным?
|
Нет, хоть миллион.
Re: Оптимизация кода -
Urukhay - 01.02.2014
Какой вариант предпочтительней по вашему мнению?
1.
pawn Код:
new skin = GetPlayerSkin(playerid);
if(skin == 69) return 1;
if(skin+3 == 66) return 1;
SetPlayerSkin(playerid,skin+6);
return 1;
2.
pawn Код:
if(GetPlayerSkin(playerid) == 69) return 1;
if(GetPlayerSkin(playerid)+3 == 66) return 1;
SetPlayerSkin(playerid,GetPlayerSkin(playerid)+6);
return 1;