¿Cómo es posible que los archivos y carpetas vacíos ocupen cero bytes en Windows?

¿Cómo es posible que los archivos y carpetas vacíos ocupen cero bytes en Windows?

yo también he preguntadouna pregunta de hermanos para Linux.


En Windows (acabo de probar):

  • El tamaño de una carpeta vacía es de 0 bytes.
  • El tamaño de un archivo vacío es de 0 bytes.

Sin embargo, los archivos y carpetas obviamente tienen nombres que deben almacenarse en algún lugar.

  • ¿Dónde, aproximadamente, se almacenan?
  • ¿La memoria máxima disponible para almacenar estos datos es un número predefinido o depende del espacio disponible en el disco?
  • ¿Un archivo vacío con un nombre corto ocupa menos espacio que un archivo vacío con un nombre más grande? (¿O quizás la estructura de datos en la que se almacenan estos nombres tiene un recuento de bytes fijo para cada archivo, que quizás llena los bytes restantes con \0?)
  • ¿Una carpeta vacía con un nombre corto ocupa menos espacio que una carpeta vacía con un nombre más grande?
  • ¿Una carpeta vacía llamada foobarocupa menos espacio, el mismo espacio o más espacio que un archivo vacío llamado foobar?
  • ¿Un archivo vacío en C:\empty.txtocupa menos espacio, el mismo espacio o más espacio que un archivo vacío en C:\long\nested\path\until\the\empty\file\is\reached\empty.txt?

Respuesta1

También hice una pregunta sobre hermanos sobre Linux.

La diferencia, si la hay, no es entre Windows y Linux (¿y realmente vas a hacer la misma pregunta para macOS, Solaris, etc.?), sino entre los sistemas reales.sistemas de archivosSe utiliza para almacenar archivos en el disco.

Sin embargo, si bien cada sistema operativo tiene sus sistemas de archivos preferidos, FAT32 en Windows todavía se comporta igual que FAT32 en Linux; NTFS en Linux funciona de la misma manera que NTFS en Windows; etcétera. Al mismo tiempo, varios sistemas de archivos en el mismo sistema operativo pueden comportarse de manera muy diferente entre sí: Ext4 y Btrfs (o FAT32 y NTFS) sonmillasseparados incluso si están en el mismo sistema operativo.

El tamaño de un archivo vacío es de 0 bytes.

En todos los casos, el tamaño del archivo informado essiempresolo el contenido real, no los metadatos. Prácticamente todos los sistemas de archivos utilizados hoy en día considerarán que son dos cosas separadas: si imagina que un archivo consta de su nombre y datos adjuntos, no, normalmente no es así como se hace.

El nombre de un archivo a menudo se almacenaen su directorio principal(que también permite enlaces duros, es decir, un archivo que tiene varios nombres). Los nombres de archivos tan largos pueden hacer que el directorio principal parezca más grande.

El resto de los metadatos relacionados con el archivo pueden estar cerca del nombre o, más comúnmente, en un área separada (por ejemplo, tabla de inodos).

¿La memoria máxima disponible para almacenar estos datos es un número predefinido o depende del espacio disponible en el disco?

Varía. Cada tipo de sistema de archivos puede tener sus propios límites: algunos tienen máximos fijos, otros están limitados a cierto porcentaje del disco, etc.

Por ejemplo, en FAT, cada directorio puede tener un número máximo determinado de "entradas de directorio" (con los nombres de archivo estilo MS-DOS 8.3 ocupando una entrada cada uno, pero los nombres de archivo largos ocupan varias). Esto no se aplica a NTFS, a pesar de que ambos están en Windows.

En Ext2/Ext4, todo el sistema de archivos está limitado a una cierta cantidad de "inodos" (uno para cada archivo o directorio) que almacena como una lista de registros de tamaño fijo y el área siempre se establece en un porcentaje fijo del disco. espacio. No es raro quedarse sin inodos en un disco Ext4. Esto no se aplica a XFS o Btrfs, que utilizan estructuras de datos dinámicas (generalmente árboles B) y simplemente crecerán según la demanda.

¿Una carpeta vacía con un nombre corto ocupa menos espacio que una carpeta vacía con un nombre más grande? (¿O quizás la estructura de datos en la que se almacenan estos nombres tiene un recuento de bytes fijo para cada archivo, que quizás llena los bytes restantes con \0?)

Varía. Para algunos (¿la mayoría?) sistemas de archivos, sí, el nombre tiene una longitud variable.

Para algunos otros sistemas de archivos, sólo en ciertos umbrales. Nuevamente, FAT/exFAT y UFS con sus ranuras de directorio de tamaño fijo serían ejemplos: si una ranura está ocupada, entonces está ocupada, sin importar si almacena un nombre de archivo de 1 byte relleno con bytes nulos o uno de 16 bytes.

¿Una carpeta vacía llamada foobar ocupa menos espacio, el mismo espacio o más espacio que un archivo vacío llamado foobar?

Nuevamente, depende del sistema de archivos.

En FAT, si no entendí bien, serían lo mismo. En NTFS sospecho que la carpeta sería más grande, pero en este punto solo estoy adivinando.

¿Un archivo vacío en C:\empty.txt ocupa menos espacio, el mismo espacio o más espacio que un archivo vacío en C:\long\nested\path\until\the\empty\file\is\reached\empty.txt?

El archivosí mismo, siempre igual, ya que el archivo no conoce su ruta completa: el sistema operativo la encuentra descendiendo por los directorios principales. Probablemente sea universal en todos los sistemas de archivos.

Sin embargo, esas carpetas ocuparían un espacio distinto de cero.

información relacionada