Título: funciones INT vs VOID Publicado por: ALONSOQ en 3 Septiembre 2012, 13:38 pm Buenas,
Una pregunta que me gustaría me aclaraseis, A la hora de trabajas la función principal con funciones, estas puedes ser void ( no devuelven nada) int (devuelven un parametro), Por ejemplo sumar dos números, se puede hacer de las dos formas; ¿ es recomendable hacerlo de alguna de las dos formas en concreto o se pueden usar indistintamente? gracias Título: Re: funciones INT vs VOID Publicado por: avesudra en 3 Septiembre 2012, 15:18 pm Depende de para qué , si entiendes punteros , el valor se pasa por referencia y entonces no hace falta que devuelva nada por lo tanto se utiliza void , pero si no pasas ningún puntero si te hace falta que devuelva algo por ser una función auxiliar pues no puede ser void, depende de para qué lo uses.Te pongo un ejemplo:
Código La salida por consola es: Código: Funcion void pasando num1 por referencia y num2 por valor , se suma el contenido Es muchísimo más manejable la int , además usan la misma cantidad de memoria las trés , eso sí no sé si por que la int retorna ,igual es más lenta(a escala muy pequeña) no tengo ni idea. Título: Re: funciones INT vs VOID Publicado por: 0xDani en 3 Septiembre 2012, 15:30 pm Yo diria la que menos memoria utiliza es la que pasa los dos numeros por referencia, ya que no se hace una copia de sus valores para operar.
Saludos. Título: Re: funciones INT vs VOID Publicado por: avesudra en 3 Septiembre 2012, 15:32 pm Yo diria la que menos memoria utiliza es la que pasa los dos numeros por referencia, ya que no se hace una copia de sus valores para operar. Pero se pasa la referencia , y el puntero a int , vale 4 bytes... No lo sé seguro la verdad.Saludos. ¡Un saludo! Título: Re: funciones INT vs VOID Publicado por: xiruko en 3 Septiembre 2012, 15:40 pm Citar Yo diria la que menos memoria utiliza es la que pasa los dos numeros por referencia, ya que no se hace una copia de sus valores para operar. yo estoy contigo... quizas en el caso de int sea lo mismo, pero si la variable es por ejemplo un struct con varios campos, la diferencia si que es notable. por ejemplo: Código
aqui una variale struct ocupa 40 bytes y en cambio un puntero al struct ocupa 8 bytes. un saludo! por cierto, acabo de hacer un sizeof(int*) y a mi me da que son 8 bytes, igual que cualquier otro puntero. Título: Re: funciones INT vs VOID Publicado por: avesudra en 3 Septiembre 2012, 15:54 pm yo estoy contigo... quizas en el caso de int sea lo mismo, pero si la variable es por ejemplo un struct con varios campos, la diferencia si que es notable. por ejemplo: Buena observación , pues claro igual con int no pero con otras cosas si como son las estructuras, ahora si que estoy con ustedes.Pues a mi me da 4 bytes con este código igual es que estoy compilando para 32 bits no sé:Código
aqui una variale struct ocupa 40 bytes y en cambio un puntero al struct ocupa 8 bytes. un saludo! por cierto, acabo de hacer un sizeof(int*) y a mi me da que son 8 bytes, igual que cualquier otro puntero. Código
Código: Sizeof int* : 4 bytes Título: Re: funciones INT vs VOID Publicado por: Oblivi0n en 3 Septiembre 2012, 16:13 pm La mas correcta suele ser la de usar parametros, es mas simple de usar, no podemos atenernos a conceptos de uso de memoria por parte de un programa ( que los ordenadores de hoy en dia no tienen 256k de memoria... )
Título: Re: funciones INT vs VOID Publicado por: avesudra en 3 Septiembre 2012, 16:31 pm La mas correcta suele ser la de usar parametros, es mas simple de usar, no podemos atenernos a conceptos de uso de memoria por parte de un programa ( que los ordenadores de hoy en dia no tienen 256k de memoria... ) Pero aún así si lo entiendes , puedes hacer un mejor programa digo yo.No te digo que para esto que es un simple número pero para un programa mayor que pongamos que use 600 MB de un array de estructuras... pues estaría bien usar punteros creo yo :xDTítulo: Re: funciones INT vs VOID Publicado por: Oblivi0n en 3 Septiembre 2012, 16:44 pm Cuando el programa maneja un gran numero de datos en memoria, lo que se suelen hacer es modelos matemáticos para evitar sobrecargar la memoria y desarrollar un algoritmo en consecuencia. Recuerda que los puntero además, son memoria dinámica, y van al heap, y este también tiene un espacio limitado... ( mucho mas limitado que el conjunto de la RAM )
Título: Re: funciones INT vs VOID Publicado por: avesudra en 3 Septiembre 2012, 17:04 pm Cuando el programa maneja un gran numero de datos en memoria, lo que se suelen hacer es modelos matemáticos para evitar sobrecargar la memoria y desarrollar un algoritmo en consecuencia. Recuerda que los puntero además, son memoria dinámica, y van al heap, y este también tiene un espacio limitado... ( mucho mas limitado que el conjunto de la RAM ) Mmmm entiendo , pero no llego a ese nivel , ¿sabes de algún escrito o libro que hable sobre eso? , cualquiera de algoritmos y estructuras de datos supongo ¿no? , no sé lo que es el heap, presupongo que será un espacio limitado para la acumulación de punteros , ya lo buscaré , gracias por la información Oblivi0n.¡Un saludo! Título: Re: funciones INT vs VOID Publicado por: Oblivi0n en 3 Septiembre 2012, 17:17 pm Si, supongo que en cualquier libro de estructuras de datos y algoritmos se tendrá que tratar estás cosas ( cuando hablo de "modelos matemáticos" son cosas sencillas eh, no te asustes xD ).
El heap es el espacio de memoria reservado para cada programa para que almacene dinamicamente ( me explico fatal ), es decir, es como un contenedor para cada programa. Un saludo! P.D: No tengo nada en contra de los punteros a funcion , que lo parece :xD Título: Re: funciones INT vs VOID Publicado por: avesudra en 3 Septiembre 2012, 21:17 pm Si, supongo que en cualquier libro de estructuras de datos y algoritmos se tendrá que tratar estás cosas ( cuando hablo de "modelos matemáticos" son cosas sencillas eh, no te asustes xD ). Me había asustado sí , lo tengo que reconocer jajaja, mmm digamos que es el espacio reservado de memoria dinámica, para cada programa? Pues a mi no me lo parece hombre, está bien que des tus explicaciones y el porqué de todo.El heap es el espacio de memoria reservado para cada programa para que almacene dinamicamente ( me explico fatal ), es decir, es como un contenedor para cada programa. Un saludo! P.D: No tengo nada en contra de los punteros a funcion , que lo parece :xD Título: Re: funciones INT vs VOID Publicado por: Oblivi0n en 3 Septiembre 2012, 21:54 pm Esto ilustra lo que te quería comentar: (http://www.redhat.com/magazine/009jul05/features/execshield/figs/valayout.jpg) Donde pone "data for small objects" se refiere al heap ( o "monton" en español ).
Si quieres, intentaré mirar por algun libro que tenga de estructuras de datos(en español), o alguna clase por youtube ( si sabes inglés claro ), en los que explican estos conceptos. Si me acuerdo, me pongo en contacto contigo :xD Título: Re: funciones INT vs VOID Publicado por: avesudra en 4 Septiembre 2012, 01:59 am Esto ilustra lo que te quería comentar: (http://www.redhat.com/magazine/009jul05/features/execshield/figs/valayout.jpg) Donde pone "data for small objects" se refiere al heap ( o "monton" en español ). No estaria mal , pero el inglés de oido fatal pero bueno si los tienes a mano un cable que echas! Si quieres, intentaré mirar por algun libro que tenga de estructuras de datos(en español), o alguna clase por youtube ( si sabes inglés claro ), en los que explican estos conceptos. Si me acuerdo, me pongo en contacto contigo :xD ¡Un saludo y muchas gracias! Título: Re: funciones INT vs VOID Publicado por: ALONSOQ en 4 Septiembre 2012, 16:49 pm Gracias por vuestras respuestas.
Gracias Avesudra por tu respuesta tan detallada un saludo |