Virtualisation: Virtual memory allows multiple programs running at the same time to store their variables (and everything else) in the same memory locations. One single real shared computer becomes a virtual private computer for each of its users. Time-sharing to allow multiple programs to run at the same time even when we haven't got a multi-core CPU has a similar effect. Data can only be accessed from disc in whole blocks at a time, each block is described by four numbers: disc drive number, surface number, track number and surface number (or as IBM called them cylinder, head, and surface, CHS, the disc drive number is taken for granted). But the operating system makes all that seem to be a rational organised collection of files and directories or whatever length is desired, in all sorts of different formats. This is the program that didn't behave. I realise now that that is due to the summer upgrade of rabbit, it is a security feature. If you can't predict where variables are going to be, worms are much more difficult to craft. Programs are now started with a (restrictedly) random initial value for the stack pointer. This was the program, but there isn't much point in it now. #include int main() { int a, b; printf("value for a: "); scanf("%d", & a); printf("a is at %08X and contains %d\n", & a, a); printf("value for b: "); scanf("%d", & b); printf("a is at %08X and contains %d\n", & a, a); }