Publi

  • Variables compartidas entre procesos hijos en C [fork()]

    Otra forma de enfrentarse con la concurrencia, en el maravilloso mundo de hacer varias cosas al mismo tiempo, es utilizar procesos hijos con fork(). La principal diferencia con respecto a los threads es que éstos son procesos completos, es decir, el sistema operativo les ha dado una zona de memoria de código, otra de datos, y otra de pila, a diferencia de los threads que compartían código y datos, sólo tenían la pila diferente.… Leer artículo completo

  • Aventuras devolviendo una licencia de Windows que venía de serie con un portátil

    Software libre, sin licencia de Windows

    Este post cuenta con una actualización del 27 de Agosto de 2013, que cuenta acerca de las devoluciones de Windows 8.

    Hace un par de meses, me compré un portátil nuevo, el anterior había cumplido 6 años y por motivos laborales debía cambiarlo. El caso, es que, como casi todos los ordenadores actualmente, viene con una versión de Microsoft Windows7 recomendada hasta la saciedad por el fabricante, que aunque lleguen a decir alguna vez que Ubuntu es más seguro que Windows, al poco tiempo y por la cuenta que les trae vuelven a recomendar Windows.… Leer artículo completo

  • Reservar dinámicamente memoria para un array bidimensional en C

    led_array
    Uno de los grandes defectos de un array, es que en tiempo de codificación debemos definir el tamaño que tendrá en tiempo de ejecución. A veces, es lo más fácil y está bien, lo utilizamos, puede que malgastemos unos bytes, pero no pasa nada, otras veces es una variable de un tamaño justo y no nos excedemos. Pero muchas veces, el gran problema, es que no tenemos ni idea de cuánto tamaño darle; si le damos poco, porque nos quedamos cortos, si nos pasamos, porque malgastaremos varios Megabytes, y a veces sabemos que incluso aunque algunas veces se desperdicie gran cantidad de memoria habrá casos en los que nos quedamos cortos.… Leer artículo completo

  • Memoria dinámica con Arduino en C++

    Uno de los problemas al programar en C++ con Arduino es la utilización de memoria dinámica. Podemos comprobar que el uso de malloc / realloc / free está soportado, pero no new y delete.

    La ventaja, en Arduino, para utilizar new y delete es que éstos llaman al constructor y al destructor respectivamente, lo cual nos permite poder crear objetos de forma dinámica.

    Para crear los operadores new y delete, he utilizado malloc() y free(), lo malo es que no hacemos comprobación de errores, por lo que, cuando falle algo, los resultados serán inesperados, aunque podremos crear alguna función que detenga la ejecución del programa cuando ocurra algún error.… Leer artículo completo

  • Fibonacci recursivo en C [ intentemos no repetir operaciones! ]

    fibo
    Es un ejercicio muy típico cuando se está aprendiendo con funciones recursivas es la sucesión de Fibonacci, aquella en la que F(n)=F(n-1)+F(n-2).
    Aunque esta técnica podemos (y deberíamos) utilizarla para una gran cantidad de algoritmos. A veces es necesario sacrificar un poco la memoria del sistema (sin pasarnos) para agilizar y hacer más rápido el programa. Debemos adoptar una solución que beneficie al usuario, no es plan de dejarlo sin memoria, pero tampoco es plan de que la solución se eternice.… Leer artículo completo

  • Separar palabras de una cadena en C [ método dinámico con puntero triple ]

    photo-1444228250525-3d441b642d12
    Hace un mes o así publiqué un método para extraer las palabras de una cadena en un Array, ahora traigo un nuevo fragmento de código cuya misión es no estar tan limitado, y no tener que decir con antelación y con ello no tener que reservar memoria precipitadamente.

    Dejo dos códigos fuente, en el primero, la reserva de memoria para almacenaje de información es palabra por palabra, es decir, me llega una palabra reservo memoria, me llega otra, amplio en 1 elemento la memoria reservada y así hasta recibir todas (incluyo el código para probar la función):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>

    /**
    ******************************************************************
    * @brief Extrae palabras de una cadena y las coloca en un puntero
    *        doble E/S (triple, por tanto).
    Leer artículo completo