Portal SAMP
[Ajuda] Tamanho maximo de String - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Tamanho maximo de String (/showthread.php?tid=4572)



Tamanho maximo de String - Okkotsu - 25/02/2024

Boa tarde, gostaria de saber qual tamanho maximo de Strings aceita por comando?


por exemplo: String[56];
quero saber qual valor maximo que pode ser utilizado, pois estou com problemas de :


Run time error 3: "Stack/heap collision (insufficient stack size)"

Stack pointer (STK) is 0x1EBE65C, heap pointer (HEA) is 0x1EBF3DC



RE: Tamanho maximo de String - Okkotsu - 25/02/2024

Consegui consertar utilizando: #pragma dynamic, se é uma boa solução eu não sei, mas no momento está funcional.


RE: Tamanho maximo de String - zBreno - 26/02/2024

include a_samp sempre no topo e sempre compilar com o crash detect
isso que você fez é uma solução temporária, pragma no geral é apenas uma gambiarra pra ocultar os avisos do compilador
aqui tem uma lista de erros de tempo de execução https://sampforum.blast.hk/showthread.php?tid=482429
aqui tem um solução diferente mas não lembro agora se a longo prazo isso pode travar o servidor https://sampforum.blast.hk/showthread.php?tid=409184
leia o erro 106 aqui https://forums.alliedmods.net/showthread.php?t=201044

Your script has apparently ran out of local memory. The stack is where any local variables are allocated and stored, in terms of memory. This means that the stack and the heap are colliding with each other, which could effectively corrupt data in the long run.

Solution: Try to use less cells for local declaration. For example, huge strings can be declared using "static" so it isn't allocated every function call. Alternatively, there's "#pragma dynamic x" but that's only if you're lazy.

https://github.com/pawn-lang/compiler/blob/master/doc/pawn-lang.pdf


RE: Tamanho maximo de String - White_Blue - 27/02/2024

(26/02/2024 08:38)zBreno Escreveu: include a_samp sempre no topo e sempre compilar com o crash detect
isso que você fez é uma solução temporária, pragma no geral é apenas uma gambiarra pra ocultar os avisos do compilador
aqui tem uma lista de erros de tempo de execução https://sampforum.blast.hk/showthread.php?tid=482429
aqui tem um solução diferente mas não lembro agora se a longo prazo isso pode travar o servidor https://sampforum.blast.hk/showthread.php?tid=409184
leia o erro 106 aqui https://forums.alliedmods.net/showthread.php?t=201044

Your script has apparently ran out of local memory. The stack is where any local variables are allocated and stored, in terms of memory. This means that the stack and the heap are colliding with each other, which could effectively corrupt data in the long run.

Solution: Try to use less cells for local declaration. For example, huge strings can be declared using "static" so it isn't allocated every function call. Alternatively, there's "#pragma dynamic x" but that's only if you're lazy.

https://github.com/pawn-lang/compiler/blob/master/doc/pawn-lang.pdf

Apenas um adendo: a diretiva pragma, como um todo, não é apenas usada para "gambiarras". A diretiva pragma serve para passar instruções para o compilador de como o código deve ser compilado, as quais nem sempre são "gambiarras".

Um exemplo mais óbvio é "#pragma deprecated", muito usado em certas includes como o open.mp standard library, para avisar o usuário de que uma função não é mais suportada ou mantida. Outro exemplo é "#pragma amxlimit", que define o tamanho máximo do arquivo amx a ser gerado. Ou ainda "#pragma codepage", para alterar o encoding.

Sobre a questão do tópico: Tente evitar criar variáveis sem necessidade. Crie variáveis estáticas globais para formatar strings sem ter que criar uma nova string toda vez que você for formatar uma mensagem. Além disso, em funções que você usa muitas vezes no código, você pode definir as variáveis dessas funções como estáticas. Uma variável estática é apenas alocada uma vez durante toda a execução do programa, diferente de variáveis dinâmicas, que são alocadas toda vez que você usa e desalocadas depois. Use foreach para loops de players e veículos e sempre defina o tamanho das strings de acordo com suas necessidades, nunca crie strings gigantes sem necessidade. E não, não há um tamanho máximo de string definido.