Cómo calcular la cantidad de RAM que ocupará un archivo de texto (si está cargado en una matriz)

No especifica cómo representaría el archivo en la memoria. ¿Sería una simple matriz de bytes? ¿Quizás una lista de cadenas que representan líneas en el archivo? Quizás esté diseñando un editor de texto y tenga una estructura de datos para almacenar caracteres, líneas o párrafos …

En el caso más simple, supongamos que carga un archivo que tiene una longitud de N-bytes desde un archivo. En ese caso, necesitará mínimamente N-bytes para mantenerlo (a menos que use algunas técnicas de compresión de datos para comprimir los datos). Sin embargo, dependiendo de cómo lea el archivo y de lo que haga con él, es posible que el archivo nunca resida en la RAM.

Por ejemplo, en un sistema operativo basado en POSIX (Linux, OS X, BSD UNIX, etc.) puede usar mmap () para asignar el archivo al espacio de direcciones de la aplicación. Desde el punto de vista de la programación de la aplicación, se vería como lee el archivo en la memoria, mientras que, de hecho, asignó la memoria a un área del sistema de archivos. El archivo en realidad no ingresa a la RAM hasta que accede a la dirección de memoria asociada, y el sistema operativo intercambia trozos del archivo dentro y fuera de la memoria según sea necesario; Por lo tanto, es posible que el archivo nunca esté completamente en RAM.

Si eso no es lo suficientemente confuso, es posible que el sistema operativo haya copiado el contenido del archivo a la RAM antes de acceder a ellos, simplemente para tenerlos listos para leer (un proceso llamado almacenamiento en caché de lectura anticipada). En ese caso, el archivo (en su totalidad o en parte) puede estar en RAM incluso sin que lo haya leído.

Entonces, si carga todo el archivo en una matriz de líneas, la memoria que ocupa es aproximadamente la misma que el tamaño del archivo si es ASCII o dos veces si utf8 o 4 veces o menos si utf16. Sin embargo, este es un riesgo de memoria si el archivo es grande.

Por lo general, solo necesita tomar un trozo de líneas a la vez, analizarlas, procesarlas, liberar memoria ocupada por estos datos de entrada (implícita o explícitamente) y obtener el siguiente trozo. Puede llamar a esto lectura almacenada en búfer, procesamiento de estilo continuo, análisis sin estado por lotes, pero la idea es, en lugar de procesar un archivo completo, procesarlo en fragmentos. Esto hace que el procesamiento tome memoria constante (o, si son líneas largas, memoria lineal con tamaño de línea).

Como se sugirió, el uso de mmap (archivos mapeados en memoria) también es una tecnología genial en sistemas unix, de hecho en los sistemas posix, que también es funcional.

Nuevamente, mencione más detalles si aún tiene el problema.

Los archivos no ocupan RAM. Las aplicaciones usan la RAM, y cuando toda la RAM está ocupada, el sistema operativo usará la memoria virtual, y sin tener en cuenta la diferencia de velocidad, no tendría idea.

Los archivos almacenados en su computadora ocupan espacio en su disco duro. El tamaño de un archivo se encuentra de manera diferente en diferentes sistemas operativos, pero en Windows creo que haga clic derecho en el archivo y haga clic en propiedades. Verá una propiedad de tamaño de archivo. En una Mac, presione Control y haga clic en un archivo y haga clic en Obtener información. Verás el tamaño del archivo allí también.

Depende La matriz tendrá un puntero de 4 bytes, y cada línea también. también depende del idioma que use y de cómo almacena los bytes en la cadena. Difícil de decir realmente. Evitaría esto si fuera posible.