Can this grow upto 4GB?
The size of the address space is capped by the number of unique pointer values. For a 32-bit processor, a 32-bit value can represent 2 ^ 32 distinct values. If you allow each such value to address a different byte of memory, you get 2 ^ 32 bytes, which equals four gigabytes.
So, yes, the virtual address space of a process can theoretically grow to 4 GB. However in reality, this may also depend on the system and processor. As can be seen:
This theoretical maximum cannot be achieved on the Pentium class of processors, however. One reason is that the lower bits of the segment value encode information about the type of selector. As a result, of the 65536 possible selector values, only 8191 of them are usable to access user-mode data. This drops you to 32TB.
Note that there are two ways to allocate memory from the system, you can, of course, allocate memory for your process implicitly using C's malloc
( your question is tagged c ), but explicitly map file bytes.
Is there any limit on the number of processes in such a system?
a process includes one or more threads that actually execute the code in the process (technically, processes don’t run, threads do) and that are represented with kernel thread objects.
According to some tests carried out here, A 32-bit Windows XP system with 2GB of default address space can create approximately 2025 threads:

However a 32-bit test limit running on 64 bit Windows XP with 4GB allocated address space
created close to 3204 threads:

However the exact thread and process limit is extremely variable, it depends on a lot of factors. The way the threads specify their stack size, the way processes specify their minimum working set, the amount of physical memory available and the system commit limit. In any case, you don't usually have to worry about this on modern systems, since if your application really exceeds the thread limit you should rethink your design, as there are almost always alternate ways to accomplish the same goals with a reasonable number.