PDA

Просмотр полной версии : [Вопрос] Header size, Code size, Data size, Stack size.



KeyMan
03.04.2017, 18:59
Здравствуйте, у меня вопрос. Я в последнее время заметил у себя в компиляторе данные записи. Думал что это комментарии от компилятора, но наткнулся в инете на тему что это размеры того-сяго. Крч не помню что там было написано)
Но вот не знаю, размеры мне не нравятся. Сильно они большие. Или же всё нормально? Вот поэтому хочу обратиться к профи. Вот сам коммент от компилятора:

Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase

Header size: 7880 bytes
Code size: 2429460 bytes
Data size: 10537552 bytes
Stack/heap size: 23600 bytes; estimated max. usage: unknown, due to recursion
Total requirements:12998492 bytes

На этом мой вопрос заканчивается, жду от профи ответа!

_[Bupyc]_
03.04.2017, 19:02
Вот тут, подробно описано http://pro-pawn.ru/showthread.php?3996-Что-такое-рекурсия-в-pawn-Пояснение

koberman
03.04.2017, 19:12
У тебя, судя по всему, где то слишком большой массив или дефайн который часто используется. Code size нормально, data size ужс. Ну и пишет про рекурсию видимо из-за этого

KeyMan
03.04.2017, 19:15
У тебя, судя по всему, где то слишком большой массив или дефайн который часто используется. Code size нормально, data size ужс. Ну и пишет про рекурсию видимо из-за этого

У меня есть три define которые я использую постоянно. И получается убрать всё заменить?

koberman
03.04.2017, 19:21
У меня есть три define которые я использую постоянно. И получается убрать всё заменить?

Эти дефайны должны иметь число, что будет означать максимальное количество. Тоже самое с массивами. Тебе надо лишь посмотреть не большое ли значение и если большое, то искать путь обхода

Nurick
03.04.2017, 19:24
Ищет рекурсии (http://pro-pawn.ru/showthread.php?3586)

KeyMan
03.04.2017, 19:27
Эти дефайны должны иметь число, что будет означать максимальное количество. Тоже самое с массивами. Тебе надо лишь посмотреть не большое ли значение и если большое, то искать путь обхода

Все массивы которые были new string[1000]; поставил на нужное кол-во. А вот с define недопёр


#define ESCM SendClientMessage(playerid, COLOR_GREY, "Вы не уполномочены использовать эту команду!"); // Дефайн вывода текста
#define ISCM SendClientMessage(playerid, COLOR_GREY, "Игрок не найден!"); // Дефайн вывода текста
вот у меня по типу такого. Короче перевод)

DelAccount
03.04.2017, 21:06
Кто что скажет о таких данных? Нормально или стоит обратить внимание на оптимизацию/переписать? 1800 строк.

Header size: 5760 bytes
Code size: 81904 bytes
Data size: 554952 bytes
Stack/heap size: 16384 bytes; estimated max. usage=501 cells (2004 bytes)
Total requirements: 659000 bytes

_[Bupyc]_
03.04.2017, 21:15
Header size - размер заголовка AMX. Обычно там находится таблица экспортируемых public-функций и переменных.
Data size - размер данных (переменные и константы).
Code size - размер кода. Если конкретнее, то это размер сгенерированных инструкций AMX, так что не пытайся в .pwn умещать весь код в одну строку - компилятору плевать на то, как написан исходный код.
Stack/heap size - объём памяти, выделяемой под стек. Обычно под стек выделяется 16384 байта (16 Кб). Если использовать директиву #pragma dynamic, под стек будет выделяться столько байт, сколько указано в директиве, но в твоём случае это не требуется, т.к. рассчитанное компилятором максимальное использование стека меньше порога в 16384 (14216 bytes).

Всё это влияет на общий объём памяти, используемой сервером. Разумеется, нужно всегда стремиться к тому, чтобы этот объём был как можно меньше, т.к. некоторые хостинги могут не потянуть всякие RLS с 100500 Мб памяти в Total requirements. А для этого нужно и из переменных мусор убирать, и говнокод переписывать, много чего.

Может так понятней будет

koberman
03.04.2017, 21:16
Все массивы которые были new string[1000]; поставил на нужное кол-во. А вот с define недопёр


#define ESCM SendClientMessage(playerid, COLOR_GREY, "Вы не уполномочены использовать эту команду!"); // Дефайн вывода текста
#define ISCM SendClientMessage(playerid, COLOR_GREY, "Игрок не найден!"); // Дефайн вывода текста
вот у меня по типу такого. Короче перевод)

С этими дефайнами все нормально. После чего вообще у тебя такие размеры получились?

SooBad
03.04.2017, 21:22
Эти дефайны должны иметь число, что будет означать максимальное количество. Тоже самое с массивами. Тебе надо лишь посмотреть не большое ли значение и если большое, то искать путь обхода

Сразу видно, что ответ от профи. Обычные макросы ни коим образом не влияют на оптимизацию. Любое значение укажи, ничего не поменяется. Это всего лишь замена некоего элемента кода на этапе прекомпиляции.

Хоть я и не люблю судить по общему объему кода(количеству строк), но, вот для ориентира данные. Мод с нуля, присутствует оптимизация, микро-экономию не соблюдаю, да, и, как можно заметить, никакой динамической памяти, коя задействуется у вас (автора темы).
Чистого кода: порядка 30к строк.


Pawn compiler 3.10.2 Copyright (c) 1997-2006, ITB CompuPhase

Header size: 10592 bytes
Code size: 809424 bytes
Data size: 794908 bytes
Stack/heap size: 16384 bytes; estimated max. usage=1603 cells (6412 bytes)
Total requirements: 1631308 bytes

Хотелось бы, конечно, увидеть примеры того-же объявления массивов, некоторых циклов и вызовов функций.
Однако, вы сами можете провести тесты, скомпилировав в мод.компиляторе исходники с ключом '-R'.

KeyMan
03.04.2017, 23:13
_;83812']Может так понятней будет

Так-с начнём с того что я хочу сказать спасибо. Мусора в переменных вроде нету, говнокод весь переписал. Эту таблицу сохраню) Ну и буду думать как оптимизировать мод, чтобы не было данного комментария.

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


Сразу видно, что ответ от профи. Обычные макросы ни коим образом не влияют на оптимизацию. Любое значение укажи, ничего не поменяется. Это всего лишь замена некоего элемента кода на этапе прекомпиляции.

Хоть я и не люблю судить по общему объему кода(количеству строк), но, вот для ориентира данные. Мод с нуля, присутствует оптимизация, микро-экономию не соблюдаю, да, и, как можно заметить, никакой динамической памяти, коя задействуется у вас (автора темы).
Чистого кода: порядка 30к строк.


Pawn compiler 3.10.2 Copyright (c) 1997-2006, ITB CompuPhase

Header size: 10592 bytes
Code size: 809424 bytes
Data size: 794908 bytes
Stack/heap size: 16384 bytes; estimated max. usage=1603 cells (6412 bytes)
Total requirements: 1631308 bytes

Хотелось бы, конечно, увидеть примеры того-же объявления массивов, некоторых циклов и вызовов функций.
Однако, вы сами можете провести тесты, скомпилировав в мод.компиляторе исходники с ключом '-R'.


В моём компиляторе, а именно в settings.cfg стоит ключ '-R' но ничего не высвечивается. Как компилирует по стандарту, так и компилит.
На всякий случай приложу кусок который записан в settings.cfg

Params= -r -w 203

SooBad
03.04.2017, 23:28
Так-с начнём с того что я хочу сказать спасибо. Мусора в переменных вроде нету, говнокод весь переписал. Эту таблицу сохраню) Ну и буду думать как оптимизировать мод, чтобы не было данного комментария.

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




В моём компиляторе, а именно в settings.cfg стоит ключ '-R' но ничего не высвечивается. Как компилирует по стандарту, так и компилит.
На всякий случай приложу кусок который записан в settings.cfg

Params= -r -w 203

Ключи располагаются в pawn.cfg. Это, иными словами, полезная фича для исследования кода(выявления ошибок и прочих косяков).Создай свободный текстовик, и пропиши там ключ: -R.

VVWVV
03.04.2017, 23:34
Ключи располагаются в pawn.cfg. Это, иными словами, полезная фича для исследования кода(выявления ошибок и прочих косяков).Создай свободный текстовик, и пропиши там ключ: -R.

Необходимо было сказать, что эта фича была добавлена в компиляторе от Zeex, а именно в версии 3.10.2 (https://github.com/Zeex/pawn/releases).

SooBad
03.04.2017, 23:44
Необходимо было сказать, что эта фича была добавлена в компиляторе от Zeex, а именно в версии 3.10.2 (https://github.com/Zeex/pawn/releases).

Я это в посте выше написал) По сути, модифицированный компилятор один, по крайней мере, других (кроме руссификатора) я не встречал.

koberman
04.04.2017, 04:21
Сразу видно, что ответ от профи. Обычные макросы ни коим образом не влияют на оптимизацию. Любое значение укажи, ничего не поменяется. Это всего лишь замена некоего элемента кода на этапе прекомпиляции.

ex:


#undef MAX_PLAYERS
#define MAX_PLAYERS 100000

new player_info[MAX_PLAYERS][player];

SooBad
04.04.2017, 19:45
ex:


#undef MAX_PLAYERS
#define MAX_PLAYERS 100000

new player_info[MAX_PLAYERS][player];

И что?
В данном случае, это то же самое, что и:

const <const_name> = value;
new array[const_name];
Я тебе про обычные макросы говорю, кои являются упрощением(в кавычках) в написании кода.
Кстати, автор темы привёл один из примеров. А вообще, глупо объявлять массив с применением макросов, в качестве размера. Если 'набор данных' будет встречаться несколько раз, будет очень муторно изменять количество затрачиваемых ячеек.

KeyMan
04.04.2017, 21:02
Ключи располагаются в pawn.cfg. Это, иными словами, полезная фича для исследования кода(выявления ошибок и прочих косяков).Создай свободный текстовик, и пропиши там ключ: -R.

Сейчас скачал компилятор от Zeex. Буду создавать, и потом сюда кину логи.

Вот скомпилировал... Ща пойду исправлять все рекурсии

.pwn(35728) : warning 208: function with tag result used before definition, forcing reparse
Pawn compiler 3.10.2 Copyright (c) 1997-2006, ITB CompuPhase

recursion detected: function 40000004!=40000004 indirectly calls itself:
40000004!=40000004 <- GetClosestPlayer <- 40000004!=40000004
recursion detected: function 40000004-0 indirectly calls itself:
40000004-0 <- OnPlayerCommandText <- 40000004-0
recursion detected: function 40000004+0 indirectly calls itself:
40000004+0 <- OnPlayerCommandText <- 40000004+0
recursion detected: function 40000004/0 directly calls itself
recursion detected: function -40000004 indirectly calls itself:
-40000004 <- GetXYInFrontOfPlayer <- -40000004
recursion detected: function 40000004>40000004 indirectly calls itself:
40000004>40000004 <- PlayerToPoint <- GetNearestVehicle <- OnPlayerCommandText <- 40000004>40000004
recursion detected: function 40000004>0 indirectly calls itself:
40000004>0 <- OnPlayerCommandText <- 40000004>0
recursion detected: function 40000004>=40000004 indirectly calls itself:
40000004>=40000004 <- PlayerToKvadrat <- 40000004>=40000004
recursion detected: function 40000004>=0 indirectly calls itself:
40000004>=0 <- OnPlayerCommandText <- 40000004>=0
recursion detected: function 40000004<40000004 indirectly calls itself:
40000004<40000004 <- OnPlayerCommandText <- 40000004<40000004
recursion detected: function 40000004<0 indirectly calls itself:
40000004<0 <- OnPlayerText <- OnPlayerCommandText <- 40000004<0
recursion detected: function 0<40000004 indirectly calls itself:
0<40000004 <- OnPlayerCommandText <- 0<40000004
recursion detected: function 40000004<=40000004 indirectly calls itself:
40000004<=40000004 <- PlayerToKvadrat <- 40000004<=40000004
recursion detected: function ABroadCast indirectly calls itself:
ABroadCast <- OnPlayerText <- OnPlayerCommandText <- ABroadCast
recursion detected: function AdvanceSpectate indirectly calls itself:
AdvanceSpectate <- StartSpectate <- AdvanceSpectate
recursion detected: function AdvertiseTimer indirectly calls itself:
AdvertiseTimer <- OnPlayerCommandText <- AdvertiseTimer
recursion detected: function BroadCast indirectly calls itself:
BroadCast <- OnPlayerCommandText <- BroadCast
recursion detected: function BuyHouse indirectly calls itself:
BuyHouse <- OnPlayerCommandText <- BuyHouse
recursion detected: function ChangeName indirectly calls itself:
ChangeName <- OnPlayerCommandText <- ChangeName
recursion detected: function CheckString indirectly calls itself:
CheckString <- OnPlayerText <- OnPlayerCommandText <- CheckString
recursion detected: function ClearTotalGz indirectly calls itself:
ClearTotalGz <- PayDay <- OnPlayerCommandText <- ClearTotalGz
recursion detected: function CompVehDel indirectly calls itself:
CompVehDel <- OnPlayerCommandText <- CompVehDel
recursion detected: function ConnectedPlayers indirectly calls itself:
ConnectedPlayers <- AdvanceSpectate <- StartSpectate <- ConnectedPlayers
recursion detected: function DelGun indirectly calls itself:
DelGun <- OnPlayerCommandText <- DelGun
recursion detected: function FixHour indirectly calls itself:
FixHour <- OnPlayerCommandText <- FixHour
recursion detected: function GameModeExitFunc indirectly calls itself:
GameModeExitFunc <- OnPlayerCommandText <- GameModeExitFunc
recursion detected: function GetClosestPlayer directly calls itself
recursion detected: function GetDistanceBetweenPlayers indirectly calls itself:
GetDistanceBetweenPlayers <- OnPlayerText <- OnPlayerCommandText <- GetDistanceBetweenPlayers
recursion detected: function GetGangName indirectly calls itself:
GetGangName <- OnPlayerCommandText <- GetGangName
recursion detected: function GetGangZoneColor directly calls itself
recursion detected: function GetMafiaName indirectly calls itself:
GetMafiaName <- OnPlayerCommandText <- GetMafiaName
recursion detected: function GetNearestVehicle indirectly calls itself:
GetNearestVehicle <- OnPlayerCommandText <- GetNearestVehicle
recursion detected: function GetPlayerID directly calls itself
recursion detected: function GetSRVMoney indirectly calls itself:
GetSRVMoney <- OnPlayerCommandText <- GetSRVMoney
recursion detected: function GiveMoney indirectly calls itself:
GiveMoney <- OnPlayerCommandText <- GiveMoney
recursion detected: function GiveWeapon indirectly calls itself:
GiveWeapon <- OnPlayerCommandText <- GiveWeapon
recursion detected: function IsAArm indirectly calls itself:
IsAArm <- SendRacersMessage <- OnPlayerCommandText <- IsAArm
recursion detected: function IsABankomat directly calls itself
recursion detected: function IsABiker indirectly calls itself:
IsABiker <- OnPlayerCommandText <- IsABiker
recursion detected: function IsACop indirectly calls itself:
IsACop <- SendRacersMessage <- OnPlayerCommandText <- IsACop
recursion detected: function IsAGang indirectly calls itself:
IsAGang <- SendGangerMessage <- OnPlayerCommandText <- IsAGang
recursion detected: function IsAInkasator indirectly calls itself:
IsAInkasator <- OnPlayerCommandText <- IsAInkasator
recursion detected: function IsAMafia directly calls itself
recursion detected: function IsAMash indirectly calls itself:
IsAMash <- OnPlayerCommandText <- IsAMash
recursion detected: function IsAMedic indirectly calls itself:
IsAMedic <- OnPlayerCommandText <- IsAMedic
recursion detected: function IsANews indirectly calls itself:
IsANews <- OnPlayerCommandText <- IsANews
recursion detected: function IsATerra indirectly calls itself:
IsATerra <- OnPlayerCommandText <- IsATerra
recursion detected: function IsATrashTruck indirectly calls itself:
IsATrashTruck <- OnPlayerCommandText <- IsATrashTruck
recursion detected: function IsIP indirectly calls itself:
IsIP <- OnPlayerText <- OnPlayerCommandText <- IsIP
recursion detected: function IsInAllowed directly calls itself
recursion detected: function IsInAllowedF directly calls itself
recursion detected: function IsNumeric indirectly calls itself:
IsNumeric <- ReturnUser <- OnPlayerCommandText <- IsNumeric
recursion detected: function IsPlayerInBandOnline indirectly calls itself:
IsPlayerInBandOnline <- OnPlayerCommandText <- IsPlayerInBandOnline
recursion detected: function IsSkinFemale indirectly calls itself:
IsSkinFemale <- OnPlayerCommandText <- IsSkinFemale
recursion detected: function IsVehicleOccupied indirectly calls itself:
IsVehicleOccupied <- OnPlayerCommandText <- IsVehicleOccupied
recursion detected: function LSNews indirectly calls itself:
LSNews <- OnPlayerText <- OnPlayerCommandText <- LSNews
recursion detected: function LVNews indirectly calls itself:
LVNews <- OnPlayerText <- OnPlayerCommandText <- LVNews
recursion detected: function LockCar directly calls itself
recursion detected: function LoopingAnim indirectly calls itself:
LoopingAnim <- OnPlayerCommandText <- LoopingAnim
recursion detected: function MD5_Copy indirectly calls itself:
MD5_Copy <- MD5_Update <- MD5_Hash <- OnPlayerCommandText <- MD5_Copy
recursion detected: function MD5_Final indirectly calls itself:
MD5_Final <- MD5_Hash <- OnPlayerCommandText <- MD5_Final
recursion detected: function MD5_Hash indirectly calls itself:
MD5_Hash <- OnPlayerCommandText <- MD5_Hash
recursion detected: function MD5_Init indirectly calls itself:
MD5_Init <- MD5_Hash <- OnPlayerCommandText <- MD5_Init
recursion detected: function MD5_Transform indirectly calls itself:
MD5_Transform <- MD5_Final <- MD5_Hash <- OnPlayerCommandText <- MD5_Transform
recursion detected: function MD5_Update indirectly calls itself:
MD5_Update <- MD5_Hash <- OnPlayerCommandText <- MD5_Update
recursion detected: function OOCNews indirectly calls itself:
OOCNews <- OnPlayerText <- OnPlayerCommandText <- OOCNews
recursion detected: function OnPlayerCommandText directly calls itself
recursion detected: function OnPlayerText indirectly calls itself:
OnPlayerText <- OnPlayerCommandText <- OnPlayerText
recursion detected: function OnPlayerUpdateAc indirectly calls itself:
OnPlayerUpdateAc <- SaveAccounts <- AdvertiseTimer <- OnPlayerCommandText <- OnPlayerUpdateAc
recursion detected: function OnPropUpdate directly calls itself
recursion detected: function PJ directly calls itself
recursion detected: function PayDay indirectly calls itself:
PayDay <- OnPlayerCommandText <- PayDay
recursion detected: function PlayerPlayMusic indirectly calls itself:
PlayerPlayMusic <- PayDay <- OnPlayerCommandText <- PlayerPlayMusic
recursion detected: function PlayerToKvadrat directly calls itself
recursion detected: function PlayerToPoint indirectly calls itself:
PlayerToPoint <- GetNearestVehicle <- OnPlayerCommandText <- PlayerToPoint
recursion detected: function PrintBizInfo indirectly calls itself:
PrintBizInfo <- OnPlayerCommandText <- PrintBizInfo
recursion detected: function PrintFarmInfo indirectly calls itself:
PrintFarmInfo <- OnPlayerCommandText <- PrintFarmInfo
recursion detected: function PrintSBizInfo indirectly calls itself:
PrintSBizInfo <- OnPlayerCommandText <- PrintSBizInfo
recursion detected: function ProxDetector indirectly calls itself:
ProxDetector <- OnPlayerText <- OnPlayerCommandText <- ProxDetector
recursion detected: function ProxDetectorS directly calls itself
recursion detected: function ReturnUser indirectly calls itself:
ReturnUser <- OnPlayerCommandText <- ReturnUser
recursion detected: function SaveAccounts indirectly calls itself:
SaveAccounts <- AdvertiseTimer <- OnPlayerCommandText <- SaveAccounts
recursion detected: function SaveBankFrac indirectly calls itself:
SaveBankFrac <- OnPlayerCommandText <- SaveBankFrac
recursion detected: function SaveBankMafia indirectly calls itself:
SaveBankMafia <- OnPlayerCommandText <- SaveBankMafia
recursion detected: function SaveGZ directly calls itself
recursion detected: function SaveMaterials indirectly calls itself:
SaveMaterials <- OnPlayerCommandText <- SaveMaterials
recursion detected: function SelectAnimation indirectly calls itself:
SelectAnimation <- OnPlayerCommandText <- SelectAnimation
recursion detected: function SendAdminMessage indirectly calls itself:
SendAdminMessage <- OnPlayerCommandText <- SendAdminMessage
recursion detected: function SendFamilyMessage directly calls itself
recursion detected: function SendGangerMessage indirectly calls itself:
SendGangerMessage <- OnPlayerCommandText <- SendGangerMessage
recursion detected: function SendHelperMessage indirectly calls itself:
SendHelperMessage <- OnPlayerCommandText <- SendHelperMessage
recursion detected: function SendJobMessage indirectly calls itself:
SendJobMessage <- OnPlayerCommandText <- SendJobMessage
recursion detected: function SendRacersMessage indirectly calls itself:
SendRacersMessage <- OnPlayerCommandText <- SendRacersMessage
recursion detected: function SendRadioMessage indirectly calls itself:
SendRadioMessage <- OnPlayerCommandText <- SendRadioMessage
recursion detected: function SendTeamMessage indirectly calls itself:
SendTeamMessage <- OnPlayerCommandText <- SendTeamMessage
recursion detected: function SendVipMessage indirectly calls itself:
SendVipMessage <- OnPlayerCommandText <- SendVipMessage
recursion detected: function SetPlayerCriminal indirectly calls itself:
SetPlayerCriminal <- OnPlayerCommandText <- SetPlayerCriminal
recursion detected: function SetPlayerWeapons indirectly calls itself:
SetPlayerWeapons <- OnPlayerCommandText <- SetPlayerWeapons
recursion detected: function ShowStats indirectly calls itself:
ShowStats <- OnPlayerCommandText <- ShowStats
recursion detected: function StartSpectate indirectly calls itself:
StartSpectate <- AdvanceSpectate <- StartSpectate
recursion detected: function StopSpectate indirectly calls itself:
StopSpectate <- AdvanceSpectate <- StartSpectate <- StopSpectate
recursion detected: function TextList_Show directly calls itself
recursion detected: function ToDevelopRating indirectly calls itself:
ToDevelopRating <- OnPlayerCommandText <- ToDevelopRating
recursion detected: function ToDevelopSkills indirectly calls itself:
ToDevelopSkills <- OnPlayerCommandText <- ToDevelopSkills
recursion detected: function UnLockCar indirectly calls itself:
UnLockCar <- OnPlayerCommandText <- UnLockCar
recursion detected: function dini_Create indirectly calls itself:
dini_Create <- OnPlayerCommandText <- dini_Create
recursion detected: function dini_Remove indirectly calls itself:
dini_Remove <- ChangeName <- OnPlayerCommandText <- dini_Remove
recursion detected: function ini_closeFile indirectly calls itself:
ini_closeFile <- SaveMaterials <- OnPlayerCommandText <- ini_closeFile
recursion detected: function ini_getString indirectly calls itself:
ini_getString <- OnPlayerCommandText <- ini_getString
recursion detected: function ini_openFile indirectly calls itself:
ini_openFile <- SaveMaterials <- OnPlayerCommandText <- ini_openFile
recursion detected: function ini_removeKey indirectly calls itself:
ini_removeKey <- PayDay <- OnPlayerCommandText <- ini_removeKey
recursion detected: function ini_setFloat indirectly calls itself:
ini_setFloat <- OnPlayerUpdateAc <- SaveAccounts <- AdvertiseTimer <- OnPlayerCommandText <- ini_setFloat
recursion detected: function ini_setInteger indirectly calls itself:
ini_setInteger <- SaveMaterials <- OnPlayerCommandText <- ini_setInteger
recursion detected: function ini_setString indirectly calls itself:
ini_setString <- OnPlayerCommandText <- ini_setString
recursion detected: function split indirectly calls itself:
split <- LoadFarm <- split
recursion detected: function strtok indirectly calls itself:
strtok <- OnPlayerText <- OnPlayerCommandText <- strtok
recursion detected: function strvalEx indirectly calls itself:
strvalEx <- OnPlayerCommandText <- strvalEx
Header size: 7880 bytes
Code size: 2428760 bytes
Data size: 10534596 bytes
Stack/heap size: 23600 bytes; estimated max. usage: unknown, due to recursion
Total requirements:12994836 bytes

1 Warning.

Чуть не забыл, вот сам код, на который идёт варн и появился после добавления этого ключа:

publics Float:GetDistanceBetweenPlayers(p1,p2) // На этот паблик идёт варнинг
{
new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2)) { return -1.00; }
GetPlayerPos(p1,x1,y1,z1); GetPlayerPos(p2,x2,y2,z2);
return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
}

SooBad
04.04.2017, 22:39
Чуть не забыл, вот сам код, на который идёт варн и появился после добавления этого ключа:

publics Float:GetDistanceBetweenPlayers(p1,p2) // На этот паблик идёт варнинг
{
new Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2;
if(!IsPlayerConnected(p1) || !IsPlayerConnected(p2)) { return -1.00; }
GetPlayerPos(p1,x1,y1,z1); GetPlayerPos(p2,x2,y2,z2);
return floatsqroot(floatpower(floatabs(floatsub(x2,x1)),2)+floatpower(floatabs(floatsub(y2,y1)),2)+floatpower(floatabs(floatsub(z2,z1)),2));
}

Точно сказать не могу, ибо сам такой метод подсчёта не использую, в основном, всё вручную, но, возможно, компилятор жалуется на повторный вызов вещественных функций инклюда float. Попробуй пошаманить с формулой, переведя возвращаемое расстояние на ручной подсчёт.

KeyMan
06.04.2017, 17:53
Точно сказать не могу, ибо сам такой метод подсчёта не использую, в основном, всё вручную, но, возможно, компилятор жалуется на повторный вызов вещественных функций инклюда float. Попробуй пошаманить с формулой, переведя возвращаемое расстояние на ручной подсчёт.

Спасибо, помогло!

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

Закройте тему!