Why 290x showes 3G memory?
Quote:oclHashcat v1.20 starting...

Device #1: Hawaii, 3072MB, 1000Mhz, 44MCU
Device #2: Hawaii, 3072MB, 1000Mhz, 44MCU

Isn't it 4G memory?
the amount of memory its reporting is not the amount of memory on the card, but rather the amount of memory that is available for compute tasks. if you want to use more than 3GB, you can set the GPU_MAX_ALLOC_PERCENT environment variable accordingly.
The GPU_MAX_ALLOC_PERCENT is automatically set by oclhashcat on program start (to help new users not to struggle with it) unless you define it, in that case it will not get overwritten. There's however a big possibility that what epix said is correct, that somehow only 3GB can be used by the opencl runtime. Why this is or how you can change that is unclear. It's just the value that the runtime is reporting back to oclHashcat.