It did double my memory usage from 1G to 2G. I'm using python. I was shocked that the increase would be so big. Most of this data is in dict's.
So now I run the memory intensive stuff in 32 bit chroots:
http://www.gentoo.org/proj/en/base/amd64/howtos/index.xml?pa...
I made a little script to make getting into the chroot environment easy:
#!/usr/bin/env bash
linux32 chroot /mnt/gentoo32 /bin/bash -c "source /etc/profile;env-update;bash"
The SBCL thing makes me wonder if there are any modern lisps that can be restricted to a 4GB (32-bit) address space, while still using 64-bit values and registers...
Then, cons cells would take up only one machine word.
If everything you point to is aligned on an eight-byte boundary, and if you don't use type tags, then a 32-bit pointer can point to anything in a 35-bit address space. So you can get up to 32 GB.
I took a quick glance at the Language Shootout to see if I could find any patterns, but at least for the few I checked, it's all over the place. For example, on the "n-body" problem, both Ruby and SBCL grow 31% on x86-64. But Ruby on "pidigits" grows only 2%, while SBCL on that problem adds a whopping 111%. On "spectral-norm", Ruby grows 61%, while SBCL grows 31%.
So this appears to be a place where moving to 64-bit is completely unknown, and you have to test for your specific application. It might double your memory usage with no change in speed, or (if you're running pidigits.rb) it might double your speed with almost no change in memory usage.