The technique is utilized by memory-error checkers that can store information on which parts of memory have been allocated to the program being checked.
An error checker may also store additional information on memory such as which bits have been defined and which ones do not.
Shadow memory can be both implemented and used a lot of different ways, and have different performance characteristics.
Memcheck for instance tracks values with bit precision, while AddressSanitizer, part of the clang compiler, is comparatively very fast.
AddressSanitizer on the other hand is created on compile-time and inserts error-checking code inline into a program during compilation.