Оптимизация кода

Quote:
Originally Posted by XemyL
Посмотреть сообщение
Ещё вопрос в догонку.)

Один человек утверждает что:
"При вызове функции с содержанием локальной переменной создаётся её копия
stock tt() { new tt = 1; printf( "%d", tt ) ; }
То при каждом вызове
Создаст копию tt
И займёт память в стеке"

Серьёзно?
Нет, каждый раз переменная создается, а потом уничтожается.
Reply

Quote:
Originally Posted by Stepashka
View Post
при его достижении 800Mb сервер не запустится
Ну это уже извращения... Но тем не менее, на машине сервера были свободны 800 метров? Что ему мешает запустится неизвестно?
Reply

Еще вопрос: допустим, есть глобальный массив с координатами машин.

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?
Или вообще, не создавать его а просто напихать дофига строчек с созданием?
Reply

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?
Или вообще, не создавать его а просто напихать дофига строчек с созданием?
Протестировал на локале, особой разницы не уловил. Пусть всевышние отпишутся.
Reply

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?
Или вообще, не создавать его а просто напихать дофига строчек с созданием?
Лучше не создавать массив, а "просто напихать дофига строчек с созданием".
Reply

Quote:
Originally Posted by AirKite
Посмотреть сообщение
Ну это уже извращения... Но тем не менее, на машине сервера были свободны 800 метров? Что ему мешает запустится неизвестно?
Так собственно я извращениями и занимался. Были. Ну наверно размер, о чем добросовестно мне сказал сервер фразой: AMX file is too big. (Дословно уже не помню)
Reply

Вопрос: если размер массива не влияет на стек, тогда что на него влияет?
Reply

Глобальные массивы не влияют на стек, а локальные влияют.
Reply

Quote:
Originally Posted by Xotab
View Post
Вопрос: если размер массива не влияет на стек, тогда что на него влияет?
Дело не в размере. И вообще на стек разумеется влияет всё, под что он выделяется. Стек можно переполнить без единого массива и наоборот. Об этом уже было сказано Over 9000 раз...

http://ru.wikipedia.org/wiki/Стек
http://ru.wikipedia.org/wiki/Переполнение_стека

По ссылкам выше многое можно понять.
Reply

Ребят, рассудите. Есть конструкция:

pawn Code:
stock Blablabla(args...)
{
#define param amout
... // blablabla
return 1;
#undef param
}
Компилятор варна не выдал. Что такая конструкция должна делать? Сработает ли она? И на каком этапе? А то запутались мы.
Reply

Quote:
Originally Posted by OKStyle
View Post
Ребят, рассудите. Есть конструкция:

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 уже не будет работать как описал выше.
Reply

Quote:
Originally Posted by AirKite
View Post
А что собственно рассудить? Кроме #define и #undef я ничего не вижу. Они и интересуют? #define задаёт макрос, #undef очищает его. т.е. между #define param amout и #undef param, param заменяется на amout. Всё что ниже #undef param уже не будет работать как описал выше.
undef после return.
Reply

Quote:
Originally Posted by Alexander_Petrov
View Post
undef после return.
а что, директивы вообще обращают внимания на скобки и то что вокруг? Нет конечно. И даже так можно

pawn Code:
stock some()
{
    #if TEST
    return 12;
    #else
    return 11;
    #endif
}
Reply

delt
Reply

Можно ли как-то задефайнить часть константы? Например:

Есть список дефайнов цветов в скрипте вида BK_COLOR, в новой версии инклюда поменялся префикс на BG. Чтобы после компиляции осталась обратная совместимость, решили ввести такой дефайн:

pawn Code:
#if defined BK_BLACK
#define BK_BLACK BG_BLACK
#endif
Но так надо для каждого цвета писать. Можно ли как-то сделать нечто подобное:

pawn Code:
#if defined BK_
#define BK_ BG_
#endif
Reply

Quote:
Originally Posted by OKStyle
View Post
Можно ли как-то задефайнить часть константы? Например:

Есть список дефайнов цветов в скрипте вида BK_COLOR, в новой версии инклюда поменялся префикс на BG. Чтобы после компиляции осталась обратная совместимость, решили ввести такой дефайн:

pawn Code:
#if defined BK_BLACK
#define BK_BLACK BG_BLACK
#endif
Но так надо для каждого цвета писать. Можно ли как-то сделать нечто подобное:

pawn Code:
#if defined BK_
#define BK_ BG_
#endif
А что говорит эксперимент?
Reply

Quote:
Originally Posted by OKStyle
View Post
Можно ли как-то задефайнить часть константы? Например:

Есть список дефайнов цветов в скрипте вида 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
Reply

Quote:
Originally Posted by Stepashka
Посмотреть сообщение
не пишите сложных запросов.
Запрос UPDATE с одновременным обновлением 100 столбцов по 1 строке будет сложным?
Reply

Quote:
Originally Posted by Xotab
Посмотреть сообщение
Запрос UPDATE с одновременным обновлением 100 столбцов по 1 строке будет сложным?
Нет, хоть миллион.
Reply

Какой вариант предпочтительней по вашему мнению?
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;
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)