Some operating systems or utilities go further by "sparsifying" files when writing or copying them: if a block contains only null bytes, it is not written to storage but rather marked as empty.
This also reduces the time of the first write as the system does not have to allocate blocks for the "skipped" space.
Loading executables on 32 bit Windows (exe or dll) which are sparse takes a much longer time since the file cannot be memory mapped in the limited 4 GB address space, and are not cached as there is no codepath for caching 32 bit sparse executables (Windows on 64 bit architectures can map sparse executables).
[citation needed] On NTFS sparse files (or rather their non-zero areas) cannot be compressed.
The Unix command will create a file of five mebibytes in size, but with no data stored on the media (only metadata).
Also, the tool filefrag from e2fsprogs package can be used to show block allocation details of the file.
A partially viable alternative on those systems is to use rsync with its own --sparse option[5] instead of cp.