-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
w0051977
  • 119
  • 7
  • 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. – David Schwartz Jul 12 '15 at 12:24
  • @David Schwartz, thanks. What do you mean by haphazard? – w0051977 Jul 12 '15 at 13:14
  • Just little things like the phrase "in a few hours". – David Schwartz Jul 13 '15 at 00:25

2 Answers2

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.

David Schwartz
  • 31,449
  • 2
  • 55
  • 84
  • 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 '15 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 '15 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 '15 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. – David Schwartz Jul 13 '15 at 00: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.

Greg Askew
  • 35,880
  • 5
  • 54
  • 82