Cual es la diferencia.
#8

Quote:
Originally Posted by Fluid016
Посмотреть сообщение
En tiempo no obtienes diferencias, ya que de todas formas llamas a lo mismo, lo que haces es resumir lнneas y a la hora de compilar lo compila en menos tiempo. (Por menos lнneas de cуdigo)
En realidad si se obtiene diferencias de ejecuciуn pero en este caso casi no es notable ya que se llaman pocas funciones, si se pregunta el porquй hay diferencias en tiempo de ejecuciуn es porque si definimos una funciуn para llamar otras funciones se genera mбs bytecode.

Con llamada de funciуn:

pawn Код:
PROC  func_01
    break    
    push.c             0x1F4
    push.c              -0x1
    push.s               0xC
    push.c               0xC
    sysreq.c    [BAD SYSREQ]
    stack               0x10
    break    
    push.c             0x22C
    push.c              -0x1
    push.s               0xC
    push.c               0xC
    sysreq.c    [BAD SYSREQ]
    stack               0x10
    break    
    push.c             0x264
    push.c              -0x1
    push.s               0xC
    push.c               0xC
    sysreq.c    [BAD SYSREQ]
    stack               0x10
    break    
    push.c             0x29C
    push.c              -0x1
    push.s               0xC
    push.c               0xC
    sysreq.c    [BAD SYSREQ]
    stack               0x10
    break    
    push.c             0x2D4
    push.c              -0x1
    push.s               0xC
    push.c               0xC
    sysreq.c    [BAD SYSREQ]
    stack               0x10
    zero.pri  
    retn      
ENDP

PROC  OnPlayerConnect
    break    
    push.s               0xC
    push.c               0x4
    call             func_01
    break    
    const.pri            0x1
    retn      
ENDP
Sin llamada de funciуn:

pawn Код:
PROC  OnPlayerConnect
    break    
    push.c             0x1F4
    push.c              -0x1
    push.s               0xC
    push.c               0xC
    sysreq.c    [BAD SYSREQ]
    stack               0x10
    break    
    push.c             0x22C
    push.c              -0x1
    push.s               0xC
    push.c               0xC
    sysreq.c    [BAD SYSREQ]
    stack               0x10
    break    
    push.c             0x264
    push.c              -0x1
    push.s               0xC
    push.c               0xC
    sysreq.c    [BAD SYSREQ]
    stack               0x10
    break    
    push.c             0x29C
    push.c              -0x1
    push.s               0xC
    push.c               0xC
    sysreq.c    [BAD SYSREQ]
    stack               0x10
    break    
    push.c             0x2D4
    push.c              -0x1
    push.s               0xC
    push.c               0xC
    sysreq.c    [BAD SYSREQ]
    stack               0x10
    break    
    const.pri            0x1
    retn      
ENDP
No es que marque mucho la diferencia pero claro estб que con la llamada de la funciуn "MensajeHolaMundo" se produce una llamada local a la funciуn "MensajeHolaMundo", en este caso no es notable la diferencia.

Recomendaria hacer este tipo de cуdigo con un iterador si el objetivo es ahorrar lineas:

pawn Код:
PROC  OnPlayerConnect
    break    
    push.c               0x0
    jump           jump_0000
 jump_0002:
    break    
    inc.s               -0x4
 jump_0000:
    load.s.pri          -0x4
    const.alt            0x5
    jsgeq          jump_0001
    break    
    push.c             0x1F4
    push.c              -0x1
    push.s               0xC
    push.c               0xC
    sysreq.c    [BAD SYSREQ]
    stack               0x10
    jump           jump_0002
 jump_0001:
    stack                0x4
    break    
    const.pri            0x1
    retn      
ENDP
Creo que esta seria la segunda manera mбs optima, es simple aca se realizan operaciones matemбticas ya que aca se dice que se van a realizar 5 saltos a partir del 0, o sea 0, 1, 2, 3, 4 que equivalen a 5 repeticiones ejecutando el nativo "SendClientMessage":

pawn Код:
push.c        0x1F4 // Argumento playerid
    push.c              -0x1 //Color en este caso (-1)
    push.s               0xC
    push.c               0xC
    sysreq.c    [BAD SYSREQ]
    stack               0x10
PD: La segunda opciуn es la mбs optima pero generaria mбs bytecode por lo cuбl el .amx seria de mayor tamaсo.

OJO: Estas operaciones son sin las condiciones ya que se me olvidу agregarlas, pero de igual forma no tienen sentido esas condiciones ya que el else if nunca se ejecutaria.

Un saludo.
Reply


Messages In This Thread
Cual es la diferencia. - by Parka - 12.11.2014, 22:26
Respuesta: Cual es la diferencia. - by Fluid016 - 12.11.2014, 22:34
Respuesta: Cual es la diferencia. - by jotajeda - 12.11.2014, 22:37
Respuesta: Cual es la diferencia. - by OTACON - 12.11.2014, 23:33
Respuesta: Cual es la diferencia. - by jotajeda - 13.11.2014, 00:11
Respuesta: Cual es la diferencia. - by OTACON - 13.11.2014, 01:32
Respuesta: Cual es la diferencia. - by jotajeda - 13.11.2014, 01:43
Respuesta: Cual es la diferencia. - by oOFotherOo - 13.11.2014, 13:58

Forum Jump:


Users browsing this thread: 1 Guest(s)