Each byte of memory in your system is assigned an address. The address is usually stored as an integer, which is usually 32 bits (4 bytes).Consider that a 32-bit integer can be represented by a string of 32 digits, each of which can be a 1 or a 0. If each possible combination of 32 1s/0s is equivalent to one possible memory address you have defined a finite number of memory addresses (or bytes) that your processor can support.

For a CPU of <i>n</i> bits, that number just happens to be <i>2<sup>n</sup></i>, so The max memory that is supported by a 32-bit CPU is <i>2<sup>32</sup></i>, or 4GB. For a 64-bit processor, the number is <i>2<sup>64</sup></i>, and clearly this is a stupid amount higher than with 32 bits.

You only need to look at a graph of <i>2<sup>x</sup></i> to see how much greater the memory space of a 64-bit processor is. In reality though, we really aren't very far at all into using the extra 32 bits, so your motherboard is the limiting factor in how much memory you can take.

Dual-core is a whole other kettle of fish though.