i386 is limited to 3GB. amd64 is limited to 4GB by default, unless "bigmem" support is enabled in a custom kernel. (This is not a tweakable setting, one must set the variable bigmem=1 in src/sys/arch/amd64/amd64/machdep.c.) I don't know why you're seeing only 2GB. The larger memory support is not enabled by default, as it has problems: