Estoy confundido sobre lo que se entiende por espacio de direcciones virtuales. En una máquina de 32 bits, un proceso puede abordar 2 ^ 32 ubicaciones de memoria. ¿Eso significa que el espacio de direcciones virtuales de cada proceso es 2 ^ 32 (4GB)? La siguiente es una instantánea del espacio de direcciones virtuales de […]
Necesito obtener la dirección de inicio y final de los siguientes segmentos de proceso: código, datos, stack, entorno. Entiendo cómo está ubicado en la memoria, pero no sé cómo obtenerlo mediante llamadas a API o alguna otra cosa. He encontrado cómo comenzar algunos segmentos usando este código #include int temp_data = 100; static int temp_bss; […]
tengo el siguiente código: int **ptr = (int **)malloc(sizeof(int*)*N); for(int i=0;i<N;i++) ptr[i]=(int*)malloc(sizeof(int)*N)); ¿Cómo puedo liberar a ptr usando free ? ¿Debo pasar sobre ptr y ptr libre [i]? o simplemente hacer free(ptr) y ptr sera liberado?
Soy un novato cuando se trata de la asignación de memoria dinámica. Cuando void free(void *ptr) la memoria utilizando void free(void *ptr) la memoria se desasigna, pero el contenido del puntero no se elimina. ¿Porqué es eso? ¿Hay alguna diferencia en los comstackdores más recientes de C?
Garantizo que esta pregunta se ha hecho antes, pero no he podido encontrarla mediante la búsqueda; Lo siento por adelantado por cualquier despido. Es mi (potencialmente erróneo) entendimiento que solo asignas a la stack cuando conoces el tamaño de un objeto en tiempo de comstackción. Entonces, en el caso de inicializar una matriz, puedes hacer […]
Tengo un problema con mi función delete_table. Así que tengo 2 estructuras struct _entry_ { int key; int data; struct _entry_* next; struct _entry_* prev; }; typedef struct _entry_ entry; struct _table_ { entry** entries; int size; }; typedef struct _table_ table; Inicializo mi mesa con calloc. void table_init(table* ht, int initial_size) { ht->entries = […]
Estoy tratando de hacer una matriz de tamaño dynamic de elementos de 1 byte. Para ello definí la siguiente función. El problema surge cuando trato de configurar los primeros elementos “nrows” de la matriz para que apunten a la fila correspondiente (para que pueda hacer la matriz [i] [j]). Parece que esa matrix[i] = matrix[nrows […]
Para un curso sobre el funcionamiento de los sistemas operativos, tuvimos que escribir una implementación malloc / free para una estructura de tamaño específico. Nuestra idea fue almacenar los gastos generales, como el inicio y el final del bloque de memoria (estática) especificado en el que debe trabajar nuestro código, en las primeras direcciones de […]
¿Cómo puedo liberar la memoria que utilicé para una variable (por ejemplo, una cadena larga) en C?
Cuando en Linux usamos la función mmap (,,, MAP_ANON | MAP_SHARED); Luego, para la misma región de memoria física fragmentada (asignada) entre los procesos se asignan páginas de memoria virtual (PTE). Es decir, estas PTE se copian de la tabla de páginas de un proceso a la tabla de páginas de otro proceso (con la […]