Autor
|
Tema: Saber la memoria liberada con free() ? (Leído 3,621 veces)
|
Locura_23
Desconectado
Mensajes: 162
|
Buenas a todos! alguien sabe si hay una manera de saber la memoria que liberaste con free() ? Si bien se podria hacer el calculo en el momento de la asignación de memoria... tal vez hay otra manera de hacer eso? Un ejemplo: #include <stdio.h> #include <stdlib.h> int main() { int num = 0; int *pArreglo = NULL; do { printf("Ingrese la cantidad espacios a reservar en el arreglo.\n"); }while(num > 0); pArreglo = (int *) calloc ( num , sizeof(int) ); if(pArreglo == NULL) { printf("Error en la asignacion de memoria.\n"); } return 0; }
|
|
|
En línea
|
|
|
|
Loretz
Desconectado
Mensajes: 117
|
¿hay una manera de saber la memoria que liberaste con free()?
No.
La forma y la cantidad de memoria asignada con malloc, calloc o realloc depende exclusivamente de tu compilador ("implementation defined"). Algunos compiladores suelen asignar un bloque de memoria mayor al que estrictamente se necesitaría, para poder disponer de información de cuánta memoria dinámica deberá liberar free().
Por ejemplo, un método frecuente en algunos compiladores es escribir primero datos sobre el tamaño, un checksum, un par de punteros a los bloques anterior y siguiente, algún marcador. y alguna cosa más, y a continuación los bytes que se solicitaron como múltiplos de 16 (a modo de optimización).
En tu ejemplo sería: primero calloc busca memoria para esa estructura de datos más la cantidad num * sizeof(int) de bytes a alojar como múltiplo de 16 (si necesita alojar 10 int, digamos 40 bytes, agregará 48 = 16*3).
Luego, la dirección devuelta por calloc es la dirección donde comienzan esos datos iniciales, no donde comienza la serie de ints.
Pero como te decía, el mecanismo real depende de cada compilador, de modo que lo que funcione para el tuyo no necesariamente funcionará para otro.
|
|
|
En línea
|
|
|
|
Locura_23
Desconectado
Mensajes: 162
|
Mmm ya veo, así que depende de cada compilador, muy interesante. Gracias por tu respuesta!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
saber el uso de memoria de un proceso
.NET (C#, VB.NET, ASP)
|
proteus8
|
2
|
3,863
|
6 Septiembre 2011, 17:24 pm
por proteus8
|
|
|
Como saber si puedo meter más memoria ram??
« 1 2 »
Hardware
|
andrecid
|
10
|
5,550
|
20 Julio 2015, 09:28 am
por Orubatosu
|
|
|
Problema al liberar memoria con free()
Programación C/C++
|
mester
|
7
|
3,696
|
21 Mayo 2016, 14:35 pm
por AlbertoBSD
|
|
|
Cómo saber si puedo ampliar la memoria RAM de un portátil
Noticias
|
wolfbcn
|
0
|
1,762
|
16 Enero 2017, 17:46 pm
por wolfbcn
|
|
|
Cómo saber cuánta memoria RAM instalar en tu PC
Noticias
|
wolfbcn
|
0
|
1,530
|
12 Marzo 2017, 14:04 pm
por wolfbcn
|
|