This has nothing to do with 32 vs 64 bit processor architecture. It has to do with the memory units used in the program. It was using 32 bit unsigned (meaning all positive, no negative, you can't have negative file space) integers. With 32 on/off bits of memory there is a total of 2^32 = 4,294,967,296 possible values. Which just so happens to also be the number of bytes in four gigabytes (4*1024*1024*1024). Thus, once the cache passed this size the program was no longer able to read/reference the location of the data within the cache since the total bytes surpassed the largest number that could be stored in the memory allocation. Moving to a 64 bit unsigned integer mean you have 2^64 = 18,446,744,073,709,551,616 possible values to store, which is safe since I don't think Source engine caches will ever pass 18 exabytes in size.