Realloc y calloc

14 04 2008 Programación
Como ya habiamos comentado en un anterior post sobre la asignación de memoria dinámica además de malloc que asigna un zona de memoria para nuestra programa tanto realloc como calloc hacen exactamente lo mismo pero además tienen capacidades adicionales (que las hacen maś caras computacionalmente hablando, así que si no necesitas ninguna de estas características utliliza directamente malloc. Sino estarás malgastando recursos).

La función calloc cuya firma o prototipo es la siguiente:

void* calloc(size_t nmemb, size_t size);

Inicializa la zona de memoria reservada. Como se puede observar sus argumentos son diferentes de las de la función malloc que sólo recibía el número de bytes a reservar. Para calloc es necesario dar el número de elementos a reservar y el tamaño de cada uno de esos elementos. Así tenemos que por ejemplo:

int* pi;
pi = calloc(50,sizeof(int));

Reservará espacio para 50 enteros asignando al puntero pi la dirección en memoria del primero.

La función realloc por otra parte intenta cambiar el tamaño de una zona de memoria previamente asignada dinamicamente copiando, si es posible, su contenido anterior.

Esta es su firma:

void* realloc(void* ptr, size_t size);

Si el cambio de tamaño no se puede llevar a cabo entonces la función devolverá un puntero a null

ip = (int* ) realloc ( ip, 25*sizeof(int) );

Siguiendo el primer ejemplo este redimensionará la zona de memoria asignada por la función calloc. Debemos tener en cuenta que esta función puede modificar además el valor del puntero. Recolocando la zona de memoria reservada en otra zona de la memoria de la máquina dependiendo de la situación. Incluso una disminución en el tamaño de la memoria puede dar lugar a una recolocación del segmento de memoria.

Como con malloc y calloc toda memoria reservada dinámicamente debe ser liberada con free.

void free(void* ptr);




Bookmark Realloc y calloc  at del.icio.us Digg Realloc y calloc Mixx Realloc y calloc Bloglines Realloc y calloc Technorati Realloc y calloc Fark this: Realloc y calloc Bookmark Realloc y calloc  at YahooMyWeb Bookmark Realloc y calloc  at Furl.net Bookmark Realloc y calloc  at reddit.com Bookmark Realloc y calloc  at blinklist.com Bookmark Realloc y calloc  at Spurl.net Bookmark Realloc y calloc  at NewsVine Bookmark Realloc y calloc  at Simpy.com Bookmark Realloc y calloc  at blogmarks Bookmark Realloc y calloc  with wists Bookmark Realloc y calloc  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

Esperanza Aguirre podría presentarse a la presidencia del PP

10 04 2008 Política nacional
La presidenta de la Comunidad Autónoma Madrileña, Esperanza Aguirre, podría presentarse al congreso que su partido va a celebrar el próximo mes de junio en Valencia para elegir al próximo presidente del PP.

Los últimos movimientos y noticias en el seno del PP está claro que son tomas de posicionamiento de cara a esta posibilidad que aparecía una y otra vez en los medios de comunicación. Aguirre está comprobando sus posibilidades a viva cuenta de que su archienemigo Luis Gallardón, alcalde de Madrid podría ocupar un nuevo cargo de enorme responsabilidad dentro del partido.

Esto se pone interesante y estoy deseando que Esperanza se presente, imagínate que celebrasen debates Rajoy - Aguirre uno en Telecinco y otro en la COPE. ¿Sobre que niña hablará ahora Rajoy?

Bookmark Esperanza Aguirre podría presentarse a la presidencia del PP  at del.icio.us Digg Esperanza Aguirre podría presentarse a la presidencia del PP Mixx Esperanza Aguirre podría presentarse a la presidencia del PP Bloglines Esperanza Aguirre podría presentarse a la presidencia del PP Technorati Esperanza Aguirre podría presentarse a la presidencia del PP Fark this: Esperanza Aguirre podría presentarse a la presidencia del PP Bookmark Esperanza Aguirre podría presentarse a la presidencia del PP  at YahooMyWeb Bookmark Esperanza Aguirre podría presentarse a la presidencia del PP  at Furl.net Bookmark Esperanza Aguirre podría presentarse a la presidencia del PP  at reddit.com Bookmark Esperanza Aguirre podría presentarse a la presidencia del PP  at blinklist.com Bookmark Esperanza Aguirre podría presentarse a la presidencia del PP  at Spurl.net Bookmark Esperanza Aguirre podría presentarse a la presidencia del PP  at NewsVine Bookmark Esperanza Aguirre podría presentarse a la presidencia del PP  at Simpy.com Bookmark Esperanza Aguirre podría presentarse a la presidencia del PP  at blogmarks Bookmark Esperanza Aguirre podría presentarse a la presidencia del PP  with wists Bookmark Esperanza Aguirre podría presentarse a la presidencia del PP  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

Reserva de memoria en glibc

09 04 2008 Programación
Glibc proporciona varias funciones para reservar memoria bajo el control explícito del programa. Cada una de estas funciones varían en cuanto a eficiencia:

  • La familia de funciones malloc permite una reserva de memoria completamente genérica.
  • Obstack es otra familia de funciones menos genérica pero más eficiente para reservar memoria tipo pila.
  • Y la función alloca te permite reservar espacio de almacenamiento dinámicamente que será liberada automáticamente.


  • Las funciones tipo malloc son las más empleadas debido a su versatilidad (aunque haya que pagar un coste en eficiencia). Está es la firma de la función malloc

    void *malloc(size_t number_of_bytes);

    Su empleo es muy sencillo, si quieres reservar digamos 300 bytes debes pasarle ese número como parámetro y la función, en caso de éxito, te devolverá un puntero al comienzo de esa zona de 300 bytes reservada para ti. En caso de error devuelve un puntero a NULL (generalmente debido a una falta de memoria). El puntero a void, el tipo del valor de retorno, simplemente nos permite, mediante un cast (implicito), emplear cualquier tipo de datos para su almacenamiento. El tipo size_t es simplemente un unsigned int definido en varios archivos de cabecera stdio.h, stddef.h, stdlib.h, and string.h:

    typedef unsigned int size_t;


    por ejemplo

    char *micadena;
    micadena = malloc(200);

    Intentará hacer que el puntero micadena apunte al comienzo de una zona reservada para ti de 200 bytes o retornando un puntero a null en caso de fallo.

    El operador sizeof (atención no es una función aunque lo parezca) se utiliza muy a menudo en conjunción con malloc ya que este nos devuelve el número de bytes que ocupa un determinado tipo de datos que se le pasa como argumento, así:

    sizeof(int);
    sizeof(char);
    sizeof(miEstructura);

    Nos devolverá el tamaño que ocupa en bytes un entero un caracter o una estructura definida por nosotros respectivamente. Siguiendo nuestro ejemplo para reservar espacio para una cadena de 200 caracteres la forma más correcta tras todo esto sería:

    char *micadena;
    micadena = malloc(sizeof(char)*200);
    if(!micadena)
    {
    printf("Error fatal. No hay suficiente memoria\n);
    }

    sizeof puede ser usado para encontrar el tamaño de cualquier tipo de datos, variables o estructuras. Simplemente debes proporcionale uno de estos como argumento. Pongo otro ejemplo de esto:

    int i;
    struct COORD {float x,y,z};
    typedef struct COORD PT;

    i = sizeof(int);
    i = sizeof(i);
    i = sizeof(struct COORD);
    i = sizeof(PT);

    Todas las lineas anteriores son válidas.

    Una función que si debería estar siempre acompañando a malloc es la función free. Se encarga de liberar la memoria que previamente hemos reservado, su firma es la siguiente:

    void free(void *ptr);

    y el puntero que le debemos pasar como argumento es obviamente el que nos devolvió la función malloc. Un error relativamente común cuando empleamos malloc es no utilizar free para liberar la memoria cuando ya no la necesitamos. Esta es la causa principal de los llamados "memory leaks" o "porque mi programa consume desenfrenadamente más y más memoria".

    Una nota sobre malloc: malloc NUNCA inicializa el bloque de memoria que acaba de reservar. Si crees por ejemplo que ese bloque debe contener byes a cero estas equivocado, puede contener cualquiera valores (basura).

    Para no hacer este post más extenso comentaré en otro proximamente las funciones realloc y calloc cuyo propósito es idéntico aunque tienen nuevas características (que también los hacen más caros computancionalmente hablando)

    Para saber más:
    Librería C de GNU

Bookmark Reserva de memoria en glibc  at del.icio.us Digg Reserva de memoria en glibc Mixx Reserva de memoria en glibc Bloglines Reserva de memoria en glibc Technorati Reserva de memoria en glibc Fark this: Reserva de memoria en glibc Bookmark Reserva de memoria en glibc  at YahooMyWeb Bookmark Reserva de memoria en glibc  at Furl.net Bookmark Reserva de memoria en glibc  at reddit.com Bookmark Reserva de memoria en glibc  at blinklist.com Bookmark Reserva de memoria en glibc  at Spurl.net Bookmark Reserva de memoria en glibc  at NewsVine Bookmark Reserva de memoria en glibc  at Simpy.com Bookmark Reserva de memoria en glibc  at blogmarks Bookmark Reserva de memoria en glibc  with wists Bookmark Reserva de memoria en glibc  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

Glibc

09 04 2008 Programación
En este pequeño post haré una pequeña introducción sobre la librería Glibc. Aunque sobradamente conocida su estudio en la mayoría de los casos es muy superficial. Tener al menos una visión global de las rutinas que implementa esta librería desarrollada por GNU es básica en muchos entornos de programación.

Empecemos por el principio y por lo más obvio (es decir, las perogrulladas). Glibc es una librería C que proporciona al lenguaje rutinas básicas de la que este carece. Rutinas para, por ejemplo, la manipulación de cadenas, operaciones de entrada y salida, administración de memoria, búsqueda en directorios y un largo etcétera. Glibc es quizá la librería más importantes en sistemas GNU/Linux - GNU/Hurd y una de las de mayor tamaño. De hecho el compilador gcc agrega por defecto está librería a la hora de iniciar la compilación y enlace de código. glibc significa GNU C Library y contiene todas las librerías especificadas por el estándar ANSI C además de características adicionales especificas de POSIX y otras derivadas de sistemas UNIX y también algunas específicas de sistemas GNU, claro.

Glibc como cualquier otra librería empleada en programas C realmente consiste en 2 partes: ficheros de cabeceras que definen tipos, macros y declaran variables y funciones; y la librería real o archivo que contiene las definiciones de las variables y funciones.

En sistemas GNU/Linux los ficheros de cabecera con todas estas declaraciones se encuentran en /usr/include mientras que la librería en sí está en /lib bajo el nombre libc-{numero-version}.so (libc-2.3.6.so en mi máquina).

Recuerda que en C, una declaración solamente proporciona información de que una función o variable existe y le asigna un tipo. Para una declaración de una función, nos puede dar además información sobre los tipos de sus argumentos. El propósito de las declaraciones es permitir que el compilador procese correctamente referencias a funciones o variables declaradas. Una definición, sin embargo, asigna espacio de almacenamiento para una variable o dice que hace una función.

Para usar las facilidades que nos proporciona librería GNU C, debes asegurarte que las fuentes de tu programa incluyen los archivos de cabecera correctos. De esta manera el compilador tendrá las declaraciones adecuadas y podrá procesar correctamente las referencias a ellas. Una vez que el programa haya sido compilado, el enlazador resolverá estas referencias proporcionadas por el archivo que contiene la librería.

Los archivos de cabecera son incluidos en las fuentes del programa mediante la directiva de preprocesador #include. El lenguaje C soporta dos tipos de directiva, la primera,

#include "header"

típicamente usada para incluir ficheros de cabecera escritos por ti mismo; esto contendrá definiciones y declaraciones describiendo interfaces entre las diferentes partes de una aplicación. Por el contrario,

#include <file.h>

Se emplea para incluir archivos de cabecera que contienen definiciones y declaraciones de una librería estándar. Esta librería normalmente ha sido instalada por el administrador del sistema. Deberías emplear esta segunda forma para añadir los archivos de cabecera de la librería C.

La primera forma buscará la librería en el directorio local, si no se especifica una ruta; y la segunda buscará el fichero de cabecera en el directorio marcado para tal fin dentro del sistema (/lib).

Bookmark Glibc  at del.icio.us Digg Glibc Mixx Glibc Bloglines Glibc Technorati Glibc Fark this: Glibc Bookmark Glibc  at YahooMyWeb Bookmark Glibc  at Furl.net Bookmark Glibc  at reddit.com Bookmark Glibc  at blinklist.com Bookmark Glibc  at Spurl.net Bookmark Glibc  at NewsVine Bookmark Glibc  at Simpy.com Bookmark Glibc  at blogmarks Bookmark Glibc  with wists Bookmark Glibc  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

La bandera española ondea en el ayuntamiento de Bilbao

07 04 2008 Política nacional
Aunque haya habido protestas, el alcalde de la capital vizcaina dice que con esta medida se ha dado cumplimiento a la sentencia del TSJPV.

El alcalde de Bilbao, Iñaki Azkuna, ha afirmado hoy que la colocación de la bandera española en el Ayuntamiento ha sido acogida con "cierta indiferencia" por los bilbaínos y que "no ha habido ninguna bronca, salvo la esperada" por este motivo.

En rueda de prensa, Azkuna se ha referido a la colocación el pasado viernes de la enseña nacional, junto con la ikurriña, en la fachada consistorial y a la posterior izada de una bandera de Bilbao de dimensiones mucho mayores en la aledaña plaza de Erkoreka.

El primer edil ha señalado que con la primera de estas medidas ha dado cumplimiento a la sentencia del Tribunal Superior de Justicia del País vasco que ordenaba que la bandera española colgara todos los días en el Ayuntamiento.

Azkuna ha asegurado que la posterior colocación de una enseña de Bilbao ha obedecido al "orgullo de los bilbaínos de tener bandera" y a que ésta existe "desde tiempo inmemorial".

Por otro lado, la izquierda abertzale ha celebrado esta tarde una manifestación contra la "imposición" de la bandera española en el Ayuntamiento.

Bookmark La bandera española ondea en el ayuntamiento de Bilbao  at del.icio.us Digg La bandera española ondea en el ayuntamiento de Bilbao Mixx La bandera española ondea en el ayuntamiento de Bilbao Bloglines La bandera española ondea en el ayuntamiento de Bilbao Technorati La bandera española ondea en el ayuntamiento de Bilbao Fark this: La bandera española ondea en el ayuntamiento de Bilbao Bookmark La bandera española ondea en el ayuntamiento de Bilbao  at YahooMyWeb Bookmark La bandera española ondea en el ayuntamiento de Bilbao  at Furl.net Bookmark La bandera española ondea en el ayuntamiento de Bilbao  at reddit.com Bookmark La bandera española ondea en el ayuntamiento de Bilbao  at blinklist.com Bookmark La bandera española ondea en el ayuntamiento de Bilbao  at Spurl.net Bookmark La bandera española ondea en el ayuntamiento de Bilbao  at NewsVine Bookmark La bandera española ondea en el ayuntamiento de Bilbao  at Simpy.com Bookmark La bandera española ondea en el ayuntamiento de Bilbao  at blogmarks Bookmark La bandera española ondea en el ayuntamiento de Bilbao  with wists Bookmark La bandera española ondea en el ayuntamiento de Bilbao  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

Firefox 3 beta 5

04 04 2008 Programación
Mozilla acaba de hacer disponible la beta 5 de su navegador. La aplicación viene con muchas mejoras: mejor rendimiento con javascript, eliminación de los memory leaks, mayor compatibilidad con los estándares web (obtiene un 71 sobre 100 en la prueba acid3), widgets nativos y ha solucionado una gran cantidad de bugs respecto a la beta anterior.

    El cambio más controvertido ha sido el del número de conexiones abiertas simultaneas con los servidores webs. En versiones anteriores de firefox el máximo de conexiones abiertas era de 2 (que es lo considerado correcto según los estandares). Subiendo este máximo se obtiene una mejora muy importante en la velocidad a la que se cargan las páginas a costa de generar una carga superior en los servidores. Este aumento en el número de conexiones ya lo han realizado otros navegadores como Internet Explorer u Opera a riesgo de aumentar las posibilidades de congestión de los sitios web.

    Puedes mirar estos cambios en la página about:config del firefox en los valores:

network.http.max-connections 30
network.http.max-connections-per-server 15
network.http.max-persistent-connections-per-proxy 8
network.http.max-persistent-connections-per-server 6
network.http.pipelining.maxrequests 4

    El valor al que hacemos referencia es el de max-persistent-connections-per-server que pasa de 2 a 6 respecto a versiones anteriores. Los otros valores también han sido aumentados para subir la velocidad al descargar las páginas.

    Estas son algunas gráficas de zdnet.com sobre el rendimiento comparativo de esta beta:

Comparativa rendimiento javascript entre diferentes navegadores

Resultado de las pruebas de ACID3 de diferentes navegadores

Este es el historial de lanzamientos de la versión Gran Paradiso de firefox (aka firefox 3.0)

Fx 3.0a1/Gecko 1.9a1 - LANZADO: 8 de Diciembre del 2006
Fx 3.0a2/Gecko 1.9a2 - LANZADO: 7 de Febrero del 2007
Fx 3.0a3/Gecko 1.9a3 - LANZADO: 23 de Marzo
Fx 3.0a4/Gecko 1.9a4 - LANZADO: 28 de Abril
Fx 3.0a5/Gecko 1.9a5 - LANZADO: 6 de Junio
Fx 3.0a6/Gecko 1.9a6 - LANZADO: 2 de Julio
Fx 3.0a7/Gecko 1.9a7 - LANZADO: 3 de Agosto
Fx 3.0a8/Gecko 1.9a8 - LANZADO: 20 de Septiembre
Fx 3.0b1/Gecko 1.9b1 - LANZADO: 20 de Noviembre
Fx 3.0b2/Gecko 1.9b2 - LANZADO: 18 de Diciembre
Fx 3.0b3/Gecko 1.9b3 - LANZADO: 12 de Febrero del 2008
Fx 3.0b4/Gecko 1.9b4 - LANZADO: 10 de Marzo del 2008
Fx 3.0b5/Gecko 1.9b5 - LANZADO: 2 de Abril del 2008
Firefox 3 Final - ESTIMADO: Junio

    Me da la espina que puede que saquen otra beta (o varias 'releases for comments') antes de la primera versión final

Bookmark Firefox 3 beta 5  at del.icio.us Digg Firefox 3 beta 5 Mixx Firefox 3 beta 5 Bloglines Firefox 3 beta 5 Technorati Firefox 3 beta 5 Fark this: Firefox 3 beta 5 Bookmark Firefox 3 beta 5  at YahooMyWeb Bookmark Firefox 3 beta 5  at Furl.net Bookmark Firefox 3 beta 5  at reddit.com Bookmark Firefox 3 beta 5  at blinklist.com Bookmark Firefox 3 beta 5  at Spurl.net Bookmark Firefox 3 beta 5  at NewsVine Bookmark Firefox 3 beta 5  at Simpy.com Bookmark Firefox 3 beta 5  at blogmarks Bookmark Firefox 3 beta 5  with wists Bookmark Firefox 3 beta 5  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

La nueva versión del VIM viene cargada de novedades ;)

04 04 2008 Ocio
Screenshoot del vim

Bookmark La nueva versión del VIM viene cargada de novedades ;)  at del.icio.us Digg La nueva versión del VIM viene cargada de novedades ;) Mixx La nueva versión del VIM viene cargada de novedades ;) Bloglines La nueva versión del VIM viene cargada de novedades ;) Technorati La nueva versión del VIM viene cargada de novedades ;) Fark this: La nueva versión del VIM viene cargada de novedades ;) Bookmark La nueva versión del VIM viene cargada de novedades ;)  at YahooMyWeb Bookmark La nueva versión del VIM viene cargada de novedades ;)  at Furl.net Bookmark La nueva versión del VIM viene cargada de novedades ;)  at reddit.com Bookmark La nueva versión del VIM viene cargada de novedades ;)  at blinklist.com Bookmark La nueva versión del VIM viene cargada de novedades ;)  at Spurl.net Bookmark La nueva versión del VIM viene cargada de novedades ;)  at NewsVine Bookmark La nueva versión del VIM viene cargada de novedades ;)  at Simpy.com Bookmark La nueva versión del VIM viene cargada de novedades ;)  at blogmarks Bookmark La nueva versión del VIM viene cargada de novedades ;)  with wists Bookmark La nueva versión del VIM viene cargada de novedades ;)  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

traceroute y lft

02 04 2008 GNU/Linux
Hoy comentaremos dos utilidades muy importantes para llevar a cabo un análisis del enrutamiento de paquetes en una red. Por todos es conocido la utilidad traceroute, pero lft es mucho menos conocida pero realmente más poderosa y útil.

lft emplea paquetes TCP SYN y FIN utilizando el campo del protocolo IP 'time to live' (tiempo de vide). lft también escucha mensajes TCP y ICMP para detectar mas información acerca de la red que está atravesando.

lft sólo tiene un parámetro obligatorio; un nombre de servidor o una dirección IP. tft soporta muchas opciones:

lft [-d dport] [-s sport] [-m min] [-M max] [-a ahead] [-c scatter ms] [-t timeout ms] [-l min ttl] [-q ISN]
[-D device] [-H ttl] [-i] [-n] [-E] [-N] [-A] [-T] [-S] [-V] [-v] [ <...>] host:dport

A través de esta herramienta puedes detectar problemas de red, pasarelas fallando o tomando demasiado tiempo en la respuesta por ejemplo.

lft significa Layer Four Tracerouter.

Prueba este comando para observar sus resultados

# lft -E -N -V news.google.es

Está es la página del projecto lft

Bookmark traceroute y lft  at del.icio.us Digg traceroute y lft Mixx traceroute y lft Bloglines traceroute y lft Technorati traceroute y lft Fark this: traceroute y lft Bookmark traceroute y lft  at YahooMyWeb Bookmark traceroute y lft  at Furl.net Bookmark traceroute y lft  at reddit.com Bookmark traceroute y lft  at blinklist.com Bookmark traceroute y lft  at Spurl.net Bookmark traceroute y lft  at NewsVine Bookmark traceroute y lft  at Simpy.com Bookmark traceroute y lft  at blogmarks Bookmark traceroute y lft  with wists Bookmark traceroute y lft  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!