Я предполагаю это add.bin
редкий файл.
Большинство файловых систем Unix поддерживает редкие файлы (почти произвольных размеров). В основном можно искать на произвольное смещение прежде, чем начать писать, и блоки, через которые Вы перескакиваете, не будут на самом деле отображены на диске. При попытке считать их, то они будут полны 0s. Если Вы запишете в них, то они волшебно возникнут (но только те Вы пишете в).
Вот пример:
$ dd of=sparse obs=1K seek=1M if=<(echo foo)
0+1 records in
0+1 records out
4 bytes (4 B) copied, 0.000411909 s, 9.7 kB/s
$ ls -lh sparse
-rw-r--r-- 1 rici rici 1.1G Nov 23 17:22 sparse
$ du -h sparse
4.0K sparse
Файл, который я создал, имеет один 4-килобайтный блок на диске, которого только первые четыре символа используются. Но если Вы читаете файл нормальным способом (последовательно с начала), необходимо будет прочитать гигабайт нулей перед обнаружением foo
.
На Linux, du
обычно может сообщить об использовании фактической дисковой емкости редкого файла. Можно сказать этому сообщать об "очевидном размере" (который будет более подобен какой ls -l
отчеты) путем передачи его -b
опция. Это - расширение Гну; Posix не требует du
быть точным в его создании отчетов редких размеров файла. ("Это до реализации для определения точно, насколько точный ее методы".)
По-видимому, arm-none-eabi-objcopy
делает что-то довольно подобное dd
пример выше, в котором это разворачивает отформатированный ELF exe
в изображение RAM, и заполняет изображение путем поиска вместо того, чтобы заполнить файл нулями. Это - на самом деле, классический вариант использования для редких файлов, которые могут быть с отображенной памятью (mmap
) не подвергаясь стоимости для неиспользованных блоков.