-1

I am a developer using high level languages like C++ and .NET.

One of the external applications I support will be upgraded soon. I have received the following minimum requirements for the upgrade:

8 Core CPU - to support updating 10M records in a few hours
16G RAM - to allow project databases to be cached in memory 
500G disk  - to support project databases and backups

It is a 32 bit application. I think that means it is only capable of using 4GB of RAM. Is that always correct? Are there any limitations on the following with a 32 bit application:

Clock speed
Number of cores in processor
Hard disk space
3
  • By the way, these "requirements" seem very suspicious. It is very unusual, for example, to require a specific number of cores. And the wording seems awfully haphazard. I would doubt that these "requirements" are reliable indications of what the application requires. Jul 12, 2015 at 12:24
  • @David Schwartz, thanks. What do you mean by haphazard?
    – w0051977
    Jul 12, 2015 at 13:14
  • Just little things like the phrase "in a few hours". Jul 13, 2015 at 0:25

2 Answers 2

3

There is no particular limit on how much RAM a 32-bit process can use. A 32-bit process can only directly map 4GB of virtual memory at a time, but that's a virtual memory limit, not a RAM limit.

For example, a 32-bit process on a 64-bit machine can access a 32GB file that is cached entirely in RAM, thus reading to, and writing from, 32GB of RAM. This is just the easiest example to understand, there are many other ways. The reference to caching in the "requirements" seems to suggest that something like this is what they're referring to.

4
  • Thanks. I think what you are saying is that all the instructions can be stored in memory. However, only 4GB of instructions can be referenced by the windows process. Is that correct?
    – w0051977
    Jul 12, 2015 at 13:13
  • @w0051977, only 4gb of ram can be mapped into the process at any given moment, but the program can change those mappings around and thus, get some benefit out of more ram. It just takes the added work of swapping around the mappings.
    – psusi
    Jul 12, 2015 at 15:54
  • Thanks. Say I had a 32 bit application that requires 5GB RAM (running on a 64 bit server). Would it work like this: 4GB stored in RAM and 1GB stored in the page file. I realize this is an oversimplification. I am just trying to understand the principle. +1.
    – w0051977
    Jul 12, 2015 at 15:57
  • @w0051977 No, not at all. It's not even remotely like that. The decision to use RAM or the pagefile is totally up to the OS which isn't subject to any 4GB limitation. Jul 13, 2015 at 0:26
2

4 GB is the virtual limit. 2 GB is the physical memory limit for 32-bit processes, unless the application is linked with the "LARGEADDRESSAWARE" flag. This sets the 0x0020 bit in the characteristics section of the PE header. But the application may also launch multiple processes in the course of normal operation, each of which may consume it's own memory, so I would not assume it is using all of the required memory in a single process.

PE Header

What the application vendor/provider is really telling you is if you put the application on a single processor VM with 4 GB of memory, it will not perform well. If you go back to them and ask why, they will probably re-send you the previous email with the requirements.

4
  • Thanks +1. What tool have you used to generate the screenshots above?
    – w0051977
    Jul 12, 2015 at 15:49
  • PE Explorer....
    – Greg Askew
    Jul 12, 2015 at 15:52
  • How do you access the Window above in Process Explorer?
    – w0051977
    Jul 13, 2015 at 16:47
  • There is no physical memory limit for 32-bit processes (see my answer). There is only one memory limit on 32-bit processes, and it's a virtual limit. On Windows, it's either 2GB or 4GB depending on whether the application is LAA. Jul 13, 2015 at 18:05

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .