问题出在 dll 被加载之前,addressof_i 无法确定下来。因此,dll 必须内含一个待修正记录(fixup record),告诉加载器记得修正 addressof_i 的值。当 dll 第一次载入,没有问题。但是如果另一个行程随后也加载此 dll,而加载地址却没有与前一行程相同的话,由于 addressof_i 已被用于第一个行程(它是被共享的,不是吗),载入器不能够插手修改 addressof_i 的值。于是,对于第二个行程而言,addressof_i 的值是错误的。利用指标,可以解决这个问题。我可以使用一个非共享的数据变量,内放一个指标指向共享数据。由于此一指标是每个行程皆有一份,所以加载器可以修正其值,使它在每一个行程中都正确无误。