Red de conocimiento informático - Computadora portátil - ¿Cuál es el principio del comando de eliminación de C?

¿Cuál es el principio del comando de eliminación de C?

Compilamos un programa para ejecutarlo junto con el sistema operativo. La memoria utilizada en el programa se aplica al sistema operativo. En un sistema operativo multitarea, los programas comunes no pueden acceder a la memoria no asignada.

El sistema operativo tiene una tabla en la mano, que indica qué unidades de memoria están ocupadas por qué programas y cuáles son memoria libre (la memoria libre no necesariamente está vacía. Si el programa que escribimos no inicializa variables dinámicas, a menudo causará Cuando el valor es incierto), cuando el programa realiza una solicitud, el sistema operativo asignará memoria libre al programa. Una vez que se ejecuta el programa, el sistema operativo marca la memoria asignada como memoria libre para que la utilicen otros programas.

De hecho, notamos que escribir memoria en el disco era lento, pero eliminar la memoria ya escrita era mucho más rápido. La razón es que el sistema operativo es lento al eliminar archivos. No elimina completamente todos los datos del archivo, sino que marca el área donde se encuentra el archivo en la tabla de asignación de archivos como un área libre. los datos todavía están allí. Esto deja una puerta trasera para el software de recuperación de datos. La mayoría de los datos permanecen, lo que deja una puerta trasera para el software de recuperación de datos.

El programa propietario solicita espacio para objetos de clase A y clase B en la parte frontal del programa. Cuando se realiza una eliminación, va al montón de memoria y devuelve la ubicación de memoria especificada al sistema operativo. Por lo tanto, debe usarse junto con uno nuevo, de lo contrario tendrá graves consecuencias.

Mi suposición personal es que la eliminación simplemente le dice al sistema operativo la dirección de la variable detrás de ella. El sistema operativo cambiará la tabla en sus manos, pero el puntero a la variable eliminada permanece sin cambios y sigue siendo el. variable a la que apuntaba originalmente. Puedes ejecutar este pequeño programa:

#include lt;iostream.hgt;

int main(void)

{

int *p;

p=nuevo int;

coutlt;lt;(unsigned int)plt;lt;endl;//1

eliminar p;

coutlt;lt;(unsigned int)plt;lt;endl;//2

p=NULL;

coutlt;lt;p;

devuelve 0;

}

Como puede ver, el valor del puntero p no cambia antes y después de la eliminación. Pero si cambia 2 a coutlt;lt;*p; habrá un problema, el sistema operativo impedirá que el programa acceda a la dirección (se muestra como infracción de acceso, infracción de acceso), porque la dirección ha sido devuelta al sistema operativo. con eliminar. El puntero p en este momento se llama estado colgante o puntero salvaje, no importa cómo se llame. Aún no ha sido destruido y es posible seguir accediendo a *p retomando la dirección de otra variable, pero no ahora.

Un puntero es en realidad una variable entera sin signo, y en C, casi todos los punteros que encontramos son de 4 bytes, porque la implementación de int en C tiene el mismo tamaño que un int largo en una máquina de 32 bits.

Entonces, ¿por qué necesitamos especificar un tipo para el puntero? Supongo que esto es para determinar la longitud de la unidad de almacenamiento que se lee al acceder al objeto al que apunta. Por ejemplo, una variable de tipo char ocupa 1 byte, una variable de tipo int ocupa 4 bytes, objetos de clase y estructuras La longitud ocupada por El objeto es aún más variado Al definir un puntero p de tipo char, *p solo puede leer el contenido de un byte al ejecutar el programa. Si p es de tipo int *p, se deben leer 4 bytes consecutivos. . Además, existen operaciones de suma y resta de puntero, autoincremento y autodecremento del puntero, que se pueden utilizar para determinar la duración del movimiento.

Por otro lado, también debes evitar accidentes con los dedos. Las cadenas de control en los formatos printf y scanf en lenguaje C las debes configurar tú mismo al utilizarlas. Si no se configuran correctamente, se producirán errores. pueden ocurrir durante la operación.

Por otro lado, hay que prevenir los accidentes.