PDA

Просмотр полной версии : [Вопрос] Скорость компиляции мода



vasyok28
07.07.2016, 21:37
С недавних пор заметил что мод компилирует очень долго, мод писал я, на протяжении года, очень-очень аккуратно относился к коду. В среднем уходит на компиляцию около 30 сек +-
Нет сложных вычислений, к переменным и массивам очень аккуратно относился все пересчитывал.

При компиляции (-d3):
Header size: 11884 bytes
Code size: 2717340 bytes
Data size: 3517172 bytes
Stack/heap size: 16384 bytes; estimated max. usage=839 cells (3356 bytes)
Total requirements: 6262780 bytes

Размер amx: 2.38 МБ
Размер pwn: Не могу сказать точно так как мод писал модулями.

Список инклюдов:
#include <fixes>
#include <crashdetect>
#include <streamer>
#include <dc_cmd>
#include <sscanf2>
#include <a_mysql>
#include <foreach>

Плагины только те которые необходимы для инклюдов, ну или наоборот).

Интересует почему так долго идет компиляция. Не пишите что нубо код итд, или железо слабое.

DeimoS
07.07.2016, 22:33
Время компиляции напрямую зависит от числа глобальных переменных(массивов), от числа макросов (ибо макросы "раскрываются" именно на одном из этапов компиляции), от общего размера кода и от многого другого.
Например, вот такой код заставит компилятор подвиснуть

new lol;
switch(lol) { case 0..999999999: return 1; }
Ибо конструкция "switch/case" раскрывается в серию условий через "if/else if" (только в виде инструкций для amx-машины) так же на этапе компиляции.

Если строк в моде много, то это логично, что время компиляции увеличилось. Возможно, ты ищешь проблему там, где её нет

vasyok28
08.07.2016, 00:06
Время компиляции напрямую зависит от числа глобальных переменных(массивов), от числа макросов (ибо макросы "раскрываются" именно на одном из этапов компиляции), от общего размера кода и от многого другого.
Например, вот такой код заставит компилятор подвиснуть

new lol;
switch(lol) { case 0..999999999: return 1; }
Ибо конструкция "switch/case" раскрывается в серию условий через "if/else if" (только в виде инструкций для amx-машины) так же на этапе компиляции.

Если строк в моде много, то это логично, что время компиляции увеличилось. Возможно, ты ищешь проблему там, где её нет

Сколько строк в моде не могу сказать точно, иза модулей. Ну примерно приставить можно рп жанр готовность которого 80%
Насчет переменных массивох, я очень тщательно их объявлял и каждый комментировал и уверил что дело не в них.

Как вариант может быть что в свитче диалогов кейсы не идут по порядку ?

Макросов у меня 132.

Ведь не может мод компилироваться 30 сек. В середнем сколько должно уйти на компиляцию ?

Daniel_Cortez
08.07.2016, 00:22
Пожалуй, наиболее вероятная причина: переобъявляете MAX_PLAYERS со своим значением (например 10), а затем это значение повышаете - массивы из MAX_PLAYERS ячеек увеличиваются в размере, а вместе с ними увеличивается и время компиляции.

Ещё одна причина: раньше использовали модифицированный компилятор от Zeex, а теперь по какой-то причине стали использовать стандартный. Дело в том, что Zeex в своём форке компилятора исправил баг с реаллокацией промежуточного буфера, который в стандартной версии может здорово замедлить процесс компиляции, особенно при использовании макросов.

vasyok28
08.07.2016, 00:39
Насчет переобъявляете MAX_PLAYERS можно по подробней ? Буду очень-очень благодарен за простенький примерчик.

А насчет компилятора, с самого начала использовал стандартный.

DeimoS
08.07.2016, 00:59
Насчет переобъявляете MAX_PLAYERS можно по подробней ? Буду очень-очень благодарен за простенький примерчик.


#undef MAX_PLAYERS
const MAX_PLAYERS = 50;
А потом 50 заменил, например, на 150

vasyok28
08.07.2016, 01:01
#undef MAX_PLAYERS
const MAX_PLAYERS = 50;
А потом 50 заменил, например, на 150

Неа, с самого начало работал с 1000 ячеек.

АПД, ради интереса решил раздефайнить максплеерс и поставить 50, время компиляции не поменялось лишь Data size изменилось

DeimoS
08.07.2016, 01:30
Неа, с самого начало работал с 1000 ячеек.

АПД, ради интереса решил раздефайнить максплеерс и поставить 50, время компиляции не поменялось лишь Data size изменилось

Оно несущественно изменится.
Ну тебе уже назвали самые часто встречающиеся причины. Раз мод компилируется долго, значит не всё ты продумал так, как говоришь. Либо пробуй искать причину, либо возьми компилятор от Zeex (а даже если найдёшь причину, всё равно возьми этот вариант компилятора). Другого решения нет

vasyok28
08.07.2016, 13:02
Компиляция с процом 1.9ггц: 30 сек
С процов 2.5ггц: 19,26 сек.

Проблема в желе, закройте тему. Всем спасибо!

Sp1ke
08.07.2016, 13:31
Интересует почему так долго идет компиляция. Не пишите что нубо код итд, или железо слабое.


Компиляция с процом 1.9ггц: 30 сек
С процов 2.5ггц: 19,26 сек.

Проблема в желе, закройте тему. Всем спасибо!

Ок....:facepalm:

Nash_Brigers
08.07.2016, 13:37
Компиляция с процом 1.9ггц: 30 сек
С процов 2.5ггц: 19,26 сек.

Проблема в желе, закройте тему. Всем спасибо!
Не в железе.. То, что пишет у тебя при компиляции - означает, что чё-то не то..