昨天我遇到了这个实现康威生命游戏的混淆C代码:https://github.com/duckythescientist/obfuscatedLife/blob/master/life.c。作为一个伪随机生成器,它写的代码如下:
int pseudoRand = (int) &pseudoRand;
根据程序作者的评论:
我相当肯定这里的行为要么是实现定义的,要么是未定义的。然而,我不确定为什么这个值会在每次运行时有所变化。我对大多数操作系统工作方式的理解是,由于虚拟内存的缘故,栈在每次程序运行时都被初始化为相同的虚拟地址,因此地址应该每次都相同。这是一个大的数字,应该在每次运行时都不同,因此作为种子很好用。
这段代码是否会在大多数操作系统上产生不同的结果?它是否与操作系统有关?如果是这样,为什么操作系统会将同一程序映射到每次运行时的不同虚拟地址?
谢谢!