Large binary programs (e.g., applications or shared libraries written in C++) often have many functions or read-only data members that are identical. Although the size of a binary program may be reduced by merging these identical functions or read-only data members into a single copy, this optimization could be risky because it may cause the binary program to behave incorrectly if the merged functions or read-only data members are involved in certain address-related operations (e.g., address-based comparison) during the execution of the binary program.