Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DarkItachi en 28 Abril 2010, 06:53 am



Título: [DUDA] Adición de librerías
Publicado por: DarkItachi en 28 Abril 2010, 06:53 am
Hola buenas :) Tengo una pregunta, cuando metes una directiva de preprocesador como
Código
  1. #include <string>
el compilador incluye las funciones que usas o todas? Es decir, si vas a usar dos funciones chorra como strlen o strlwr es mejor incluir la librería string o creártelas por tu mismo en el programa? Qué ventajas tiene? Y que desventajas?

Salu2


Título: Re: [DUDA] Adición de librerías
Publicado por: Akai en 28 Abril 2010, 08:15 am
Las incluye todas. A menos que tuvieses límites de meoria y/o espacio, la inclusión de toda la libreria en vez de únicamente las x funciones que tu uses, no debería ser un problema.


Título: Re: [DUDA] Adición de librerías
Publicado por: Littlehorse en 28 Abril 2010, 08:37 am
Citar
Que desventajas?

Depende la función, pero si hablamos de funciones estándar no seria lo mas adecuado reemplazarla al menos que estemos hablando de algo estrictamente necesario.

Por ejemplo, es muy sencillo hacer una función que cuente los caracteres de un arreglo, pero funcionara igual que la estándar? sera igual de rápida? sera portable? sera igual de segura?.
Ten en cuenta que con ese criterio tendrías que codificar por tu cuenta mas de una función y eso no solo ampliara el tiempo de desarrollo, ademas, hará que el programa final sea mas susceptible a errores (Como se suele decir, prone to error)

Seguramente muchas funciones se podrían hacer en menos lineas, pero menos lineas no siempre significa mejor.

Mi opinión por lo menos es que no existen ventajas de la forma que lo estas planteando.

Saludos


Título: Re: [DUDA] Adición de librerías
Publicado por: DarkItachi en 28 Abril 2010, 14:03 pm
Citar
Que desventajas?

Depende la función, pero si hablamos de funciones estándar no seria lo mas adecuado reemplazarla al menos que estemos hablando de algo estrictamente necesario.

Por ejemplo, es muy sencillo hacer una función que cuente los caracteres de un arreglo, pero funcionara igual que la estándar? sera igual de rápida? sera portable? sera igual de segura?.
Ten en cuenta que con ese criterio tendrías que codificar por tu cuenta mas de una función y eso no solo ampliara el tiempo de desarrollo, ademas, hará que el programa final sea mas susceptible a errores (Como se suele decir, prone to error)

Seguramente muchas funciones se podrían hacer en menos lineas, pero menos lineas no siempre significa mejor.

Mi opinión por lo menos es que no existen ventajas de la forma que lo estas planteando.

Saludos

Osea, que es mejor usar librerías aunque vayas a usar solo una función. Pero si incluyes más librerías influye en el tamaño del ejecutable :?

Gracias.


Título: Re: [DUDA] Adición de librerías
Publicado por: biribau en 28 Abril 2010, 16:31 pm
Por norma general NO incluye todas las librerías, de una librería sacas libros independientes, o sea funciones. Incluye TODAS las funciones en compilación(declaraciones), pero en linkado(ejecutable final) solo mete las que uses(y dependientes), por eso las librerías son objetos especiales, no simples .obj, sino que son colecciones de simbolos indexados o algo así.

@Littlehorse: es error-prone :P

Por otra parte puedes implementarlas, a veces es util y otras necesario, a veces se necesitan implementaciones ligeras(uClib) otras reimplementaciones (cualquier nuevo sistema operativo necesitará cambios en las llamadas al sistema), mas eficientes(hay multitud de librerias para gestion de heap(malloc/free), smartpointers). Yo hice una vez mi propio new delete, para debuguear memory leaks. Y también es sabido que una de los mayores cuellos de botella fácilmente optimizables son precisamente en la gestión de memoria dinámica(sólo daros cuenta que la implementación que te dan es genérica y debe servir para todos más o menos, pero tú en tu programa tienes más información de como se usa la memoria pues puedes adaptarlo, especializarlo a tí haciendolo más rápido, evitando congelamientos a veces para no desmejorar la inmediatez de la respuesta(que raro suena esto, no recuerdo como era en inglés xD))


Título: Re: [DUDA] Adición de librerías
Publicado por: Lambda en 28 Abril 2010, 16:43 pm
Por norma general NO incluye todas las librerías, de una librería sacas libros independientes, o sea funciones. Incluye TODAS las funciones en compilación(declaraciones), pero en linkado(ejecutable final) solo mete las que uses(y dependientes), por eso las librerías son objetos especiales, no simples .obj, sino que son colecciones de simbolos indexados o algo así.

@Littlehorse: es error-prone :P

Por otra parte puedes implementarlas, a veces es util y otras necesario, a veces se necesitan implementaciones ligeras(uClib) otras reimplementaciones (cualquier nuevo sistema operativo necesitará cambios en las llamadas al sistema), mas eficientes(hay multitud de librerias para gestion de heap(malloc/free), smartpointers). Yo hice una vez mi propio new delete, para debuguear memory leaks. Y también es sabido que una de los mayores cuellos de botella fácilmente optimizables son precisamente en la gestión de memoria dinámica(sólo daros cuenta que la implementación que te dan es genérica y debe servir para todos más o menos, pero tú en tu programa tienes más información de como se usa la memoria pues puedes adaptarlo, especializarlo a tí haciendolo más rápido, evitando congelamientos a veces para no desmejorar la inmediatez de la respuesta(que raro suena esto, no recuerdo como era en inglés xD))

Las .lib (y creo que las .a tambien) son simples colecciones de .objs, de hecho puedes extraerlos xD

Sobre el tema, cuando incluyes el <string> lo que hace el preprocesador es reemplazar esa linea por todo el contenido del header pero luego a la hora de linkear el linker solo metera las funciones que utilizas.


Título: Re: [DUDA] Adición de librerías
Publicado por: DarkItachi en 28 Abril 2010, 17:16 pm
Por norma general NO incluye todas las librerías, de una librería sacas libros independientes, o sea funciones. Incluye TODAS las funciones en compilación(declaraciones), pero en linkado(ejecutable final) solo mete las que uses(y dependientes), por eso las librerías son objetos especiales, no simples .obj, sino que son colecciones de simbolos indexados o algo así.

@Littlehorse: es error-prone :P

Por otra parte puedes implementarlas, a veces es util y otras necesario, a veces se necesitan implementaciones ligeras(uClib) otras reimplementaciones (cualquier nuevo sistema operativo necesitará cambios en las llamadas al sistema), mas eficientes(hay multitud de librerias para gestion de heap(malloc/free), smartpointers). Yo hice una vez mi propio new delete, para debuguear memory leaks. Y también es sabido que una de los mayores cuellos de botella fácilmente optimizables son precisamente en la gestión de memoria dinámica(sólo daros cuenta que la implementación que te dan es genérica y debe servir para todos más o menos, pero tú en tu programa tienes más información de como se usa la memoria pues puedes adaptarlo, especializarlo a tí haciendolo más rápido, evitando congelamientos a veces para no desmejorar la inmediatez de la respuesta(que raro suena esto, no recuerdo como era en inglés xD))

Las .lib (y creo que las .a tambien) son simples colecciones de .objs, de hecho puedes extraerlos xD

Sobre el tema, cuando incluyes el <string> lo que hace el preprocesador es reemplazar esa linea por todo el contenido del header pero luego a la hora de linkear el linker solo metera las funciones que utilizas.

Entonces, no importa si metes muchas librerias?

Salu2


Título: Re: [DUDA] Adición de librerías
Publicado por: Littlehorse en 28 Abril 2010, 19:12 pm
No, no importa.

@biribau: Es exactamente lo mismo.

Saludos