last day (43 days later) » 

4:55 PM
@ElPatrón He editado tu pregunta, a ver si así la entienden mejor. Y votado para su reapertura. No se porqué la han cerrado :-/
 
5:08 PM
@ElPatrón ¿ Porqué la has borrado ? ¡ Si estaban a punto de reabrirla !
@NaCl La eliminó. Una pena, tenía jugo para hacer una gran respuesta :-(
 
5:35 PM
@ElPatrón Te la he editado un poco, y estoy intentando que voten para recuperarla.
 
 
2 hours later…
7:08 PM
@ElPatrón Después de editarte la pregunta, recuperarla, reabrirla ... O_o Esas cosas me pasan por ser tan buenaso
 
7:25 PM
@NaCl te llega esto ?
 
@Trauma Acá estoy :P
@Trauma No la eliminé, fue el mismo usuario, yo voté para su reapertura :(
 
Ah no, no queria decir eso. Hablaba contigo, para indicarte que el usuario la elimino
Pero, si no te llegan a ti ... tampoco le llegan a @ElPatrón ??
 
@Trauma Me di cuenta en el instante, se puso roja y voté inmediatamente.
@Trauma No, me llega a la bandeja en el sitio, pero cuando estoy en el chat debo ver las demás salas.
 
@NaCl Ah, Ok. Entonces funciona.
 
@Trauma Sí
 
7:29 PM
Le deben de haber llegado mis quejas jeje
 
El prototipo de la función está mal :P
int eternal(void) => return eternal();
 
@NaCl Es C, tio.
Esta bien.
Es Tail Call Optimization en C
 
@Trauma Jajajaja, estoy mezclando las cosas.
@Trauma Un void retornando void?
 
Que creias, que era javascript
Sip. Mola
Permite hacer funciones recursivas sin quedarte sin pila
 
Eso es el oblivion
 
7:31 PM
¿¿ ??
 
Debo probarlo xD
 
Espera, que busco la pregunta ...
 
Oblivion: Vacío, la nada.
 
1
Q: Segmentation Fault - Recursividad

Ivan BoteroHe creado la siguiente funcion: void imprimir(void){ cout << "Y\n"; imprimir(); } Intentando aprender mas sobre la utilidad que podria tener el uso de una funcion recursiva (funcion que se llama a si misma). Al incluirla en mi codigo, este ha quedado asi: #include <iostream> using n...

 
Pero, eso igual trae problemas con stack
Pues, cada vez que llamas a una función se hace push ebp push eip y otros registros
 
7:33 PM
Que va. Hay una optimización del compilador para eso
Tail Call Optimization
 
Creo
Que lo optimiza a lo siguiente:
l1:
    ; lo que sea
jmp l1:
 
@NaCl haz la prueba con el código que le puse en la respesta, y verás :-)
 
Como si fuera un bucle.
 
@NaCl no lo se, nunca he mirado el ensamblador de eso
supono que si, que lo hará con saltos locales
 
Es lo único que se me ocurre
Para no tener problemas con el stack pointer
 
7:35 PM
el gcc lo hace si las funciones son compatibles, y creo que solo si están en el mismo archivo .c
 
Sin embargo!
Entiendo por qué no causa problemas con el stack
al hacer return eternal();
hace pop ebp y vuelve a poner el ip donde estaba
Como el instruction pointer está donde siempre, no necesita ponerlo de nuevo
Y no tiene que hacer push eax con el retorno de la función.
 
@NaCl apenas entiendo el ensamblador. Hace muchos años, por lo menos 15, que no lo toco para nada
 
Es por ello que la stack se queda intacta durante la llamada
 
Desde los programas residentes para MS-DOS
 
Jajaja
Estoy diciendo lo que creo que pasa under the hood
 
7:37 PM
Si, te voy siguiendo ... pero no puedo opinar
Es cosa de generar el .s desde gcc y mirarlo
 
Ya luego lo haré
 
@NaCl Te dejo un rato. Vamos a cenar :-O
 
Dale!
Yo terminare algunas cosas aquí :D
 
Ok
 

  last day (43 days later) »