|
201
|
Programación / Programación C/C++ / Re: ¿Que es más eficiente, utilizar array o memoria dinámica? [C]
|
en: 5 Mayo 2016, 00:35 am
|
Hola, gracias a ambos por las respuestas, muy esclarecedoras por cierto. - Una cosita más, la memoria asignada a la pila y el montón es monitoreada por el SO, hay alguna manera con C saber cuanta memoria se le asigna a estas 2 areas de memoria de un determinado programa(cuantos bytes). - Los arrays y las tablas són siempre más eficientes, pues son datos que se guardan en la pila y el código que se genera para acceder a ellos es más rápido que acceder el montón. Por otra parte la memoria de la pila es bastante más limitada, en tamaño que la del montón y para un gran número de elementos te podrías quedar sin pila de programa rápidamente. No hay contradicciones en esta descripción, digo. Saludos.
|
|
|
202
|
Programación / Programación C/C++ / ¿Que es más eficiente, utilizar array o memoria dinámica? [C]
|
en: 4 Mayo 2016, 20:03 pm
|
Hola a todos. Copie el código de la siguiente página que me indico Eternal Idol, referente a realloc: http://www.cplusplus.com/reference/cstdlib/realloc/Y grande fue mi sorpresa cuando descubrí que utilizando memoria dinámica se podía hacer lo mismo que con un array, digo sorpresa porque considero haber leído bastante sobre punteros y en ninguno hace referencia a esto. - Si esto es correcto, tengo 1 pregunta para hacerles. - ¿Que es más eficiente, utilizar array o memoria dinámica?, para el caso. - #include <stdio.h> #include <stdlib.h> #include <limits.h> int main ( void ){ size_t ingresos, n, contador = 0, ok, ch; int* numeros = NULL; int* mas_numeros = NULL; do{ do{ printf("\n Ingresa un numero entero(maximo %d => 0 finaliza )....: ", INT_MAX ); ok = scanf("%u", &ingresos ) == 1 && ingresos >= 0 && ingresos <= INT_MAX ; while( (ch = getchar()) != EOF && ch != '\n' ); if( ok == 0 ){ printf( "\n El ingreso es incorrecto, intentelo nuevamente...\n\n\t Pulse una tecla para continuar..." ); getchar(); } }while(!ok); contador++; mas_numeros = (int*)realloc( numeros , contador * sizeof(int) ); if( mas_numeros!=NULL ){ numeros=mas_numeros; numeros[contador-1]=ingresos; } else{ puts( "Error (re)allocating memory" ); } }while (ingresos!=0); printf ("\n Numeros introducidos.....: "); for( n=0; n < contador - 1; n++ ) return 0; }
Es redundante decir que al código original le efectué bastante modificaciones, pero la esencia es la misma. Saludos.
|
|
|
205
|
Programación / Programación C/C++ / Re: Liberar memoria de 2 punteros apuntando a la misma dirección(malloc/realloc/free
|
en: 3 Mayo 2016, 23:29 pm
|
Muchas gracias a los 3 por ocuparse, si entendí bien con hacer free(string2) es suficiente. - Al releer el tema en un momento dice que si string2 es menor a string1 el administrador del montón tratara de utilizar la misma dirección de memoria y como pude comprobar con este programa la dirección de string1 es la misma que string2, ¿esto es correcto? o interprete mal. - Geeke, lo tuyo es lo único que no me queda claro. -
Saludos.
|
|
|
206
|
Programación / Programación C/C++ / [Solucionado] Liberar memoria de 2 punteros apuntando a la misma dirección(C)
|
en: 3 Mayo 2016, 21:43 pm
|
Hola, gente. - ¿Es necesario liberar los 2 punteros por separado?, como lo hago en el código que dejo a continuación o es suficiente con liberar el puntero que devuelve malloc (tengo claro que malloc retorna un puntero void). - #include <stdio.h> #include <stdlib.h> #include <string.h> int main( void ){ char *string1, *string2; strcpy(string1 , "0123456789AB"); printf("string1 Valor: %p [%s]\n", string1 , string1 ); printf("string2 Valor: %p [%s]\n", string2 , string2 ); return 0; }
Bueno es todo, espero aclaración. Un abrazo.
|
|
|
208
|
Programación / Programación C/C++ / Re: Liberar memoria asignada con malloc, después de salir de la función [C].
|
en: 28 Abril 2016, 04:03 am
|
Hola, Geeke. Muchas gracias por el aporte, te voy a hacer una confesión, no tengo la más pálida idea del inglés y lo estoy traduciendo utilizando 4 traductores en línea (la tradución que me parece más acertada la paso a un borrador para estudiarlo luego) y como te imaginaras por momento entre la traducción que no es exacta y las ganas de disipar mis dudas ocurren estas cosas. - Lo de no saber nada del idioma es por mis 64 años, en mis tiempos de estudio casi no se le daba importancia al inglés, pero como todos en los foros (cuando se da la oportunidad) me dicen que los mejores contenidos están en ese idioma, bueno estoy asiendo el esfuerzo.
Te envio un abrazo.
|
|
|
|
|
|
|