#pragma dynamic
#1
Buenas, quisiera saber que valor le tengo que poner cuando pongo pragma dynamic en el code, varia depende de lo grande que sea el code? o es un valor fijo?
A esto me refiero:
Código PHP:
#pragma dynamic VALOR 

Ejemplo:
(07/04/2015, 01:43 PM)CSAxel escribió:
Código PHP:
#pragma dynamic 6144 
Zombie Escape + Niveles [MP]
HNS + Niveles [MP]
FreDDy escribió:Mierda que tenes ébola en las manos que no podes escribir bien, no te entendí una mierda.
Responder
#2
https://forums.alliedmods.net/showthread.php?t=46798
[Imagen: 76561198066347799.png]
Responder
#3
Dynamic determina la cantidad máxima de memoria que se reserva para las variables dinámicas (new). El valor default es 4096 (4096*4 = 16384bytes).

Si el plugin necesita mas memoria que la asignada va a tirar el error:
Código:
[AMXX] Run time error 3: stack error

Lo solución es o bien mejorando el codigo, porque es muy pero muy difícil que necesites usar mas memoria que la asignada por default, salvo en casos muy especiales como algoritmo recursivos; O aumentando la memoria asignada usando #pragma dynamic.


Ejemplos de stack error:
Código PHP:
public plugin_init()
{
    new 
a[4077// a partir de 4077 tira stack error
    // se usan otras 20 celdas (80 bytes) para la llamada de la función y nose que  otra mierda mas...
    // pero la cuestión es que no podes usar las 4096 celdas...
    
    
return a[0]


Código PHP:
public plugin_init()
{
    new 
a[3000]
    
    
funcion_b()
    
    return 
a[0]
}

funcion_b()
{
    new 
b[3000]
    
    return 
b[0]


Código PHP:
/* Si se ocupa una celda mas = Stack error */
public plugin_init()
{
    new 
a[64// Si usamos una celda mas (65) no tirara Stack error
    
    
    /*
    +64cell de la variable "gastando_memoria"
    +3cell de llamar a la funcion
    +1cell del parametro "valor"
    total 68cell = 272bytes
    68cell * 59llamadas =  4012cell
    */
    
funcion_a(1// se llama 59 veces en total

    // 4012cell + 64cell de la variable "a" = 4076 
    
    
    
return a[0]
}

// Función recursiva
funcion_a(valor)
{
    new 
gastando_memoria[64]
    
    if(
valor <= 58)
        
funcion_a(valor+1)
    
    return 
gastando_memoria[0]

Responder
#4
Muchas gracias a los dos, ahora lo entiendo, solucionado.
Zombie Escape + Niveles [MP]
HNS + Niveles [MP]
FreDDy escribió:Mierda que tenes ébola en las manos que no podes escribir bien, no te entendí una mierda.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)