On 32 bit systems;
- pointers are 32bits or 4 bytes
- the memory is limited to 4GB
On 64 bit systems
- pointers are 64bits or 8bytes
- Microsoft likes to make a mess... for Microsoft compilers pointers can vary in size when multiple inheritance is involved. (http://blogs.msdn.com/b/oldnewthing/archive/2004/02/09/70002.aspx)
- some far pointers also include a virtual page index in the upper bits, for a 32 bit machine you might end up with a 48 bit far pointer.