From: JmWro on
Hi All,

I'm writing small 32bit application. Not managed C++, Qt used for GUI, STL
used for data storage, some advanced single thread data processing, millions
of small objects.
I can't go for 64bit because most of users have 32bit win XP and this can
not be changed.
Unfortunately I have a problem with 2GB (per process) virtual memory limit.
Some advanced users use the application to create huge models and the tool
reaches it's limits. In fact it would need up to 8GB in worst cases.
Now I must find a solution for that. I have two ideas so far.
1. Create separate processes for data storage, do some inter-process
communication and let windows take care of caching them to page file.
2. Create custom cache file on my own.
Second solution would be easier for me but is it possible to outperform
system page file ? Any other advice ?

BR,
JM

From: ScottMcP [MVP] on
On Feb 27, 1:28 pm, "JmWro" <b...(a)adresu.i.juz> wrote:
> Hi All,
>
> I'm writing small 32bit application. Not managed C++, Qt used for GUI, STL
> used for data storage, some advanced single thread data processing, millions
> of small objects.
> I can't go for 64bit because most of users have 32bit win XP and this can
> not be changed.
> Unfortunately I have a problem with 2GB (per process) virtual memory limit.
> Some advanced users use the application to create huge models and the tool
> reaches it's limits. In fact it would need up to 8GB in worst cases.
> Now I must find a solution for that. I have two ideas so far.
> 1. Create separate processes for data storage, do some inter-process
> communication and let windows take care of caching them to page file.
> 2. Create custom cache file on my own.
> Second solution would be easier for me but is it possible to outperform
> system page file ? Any other advice ?
>
> BR,
> JM

If you use a memory mapped file for your "custom cache" file you will
be using the exact same mechanism that Windows uses for page file
swaps. (MapViewOfFile and CreateFileMapping). I would expect that
your own custom cache would outperform because you would reduce
switching between multiple processes.

From: Nobody on
"JmWro" <brak(a)adresu.i.juz> wrote in message
news:hmbo96$l7s$1(a)news.onet.pl...
> Hi All,
>
> I'm writing small 32bit application. Not managed C++, Qt used for GUI, STL
> used for data storage, some advanced single thread data processing,
> millions of small objects.
> I can't go for 64bit because most of users have 32bit win XP and this can
> not be changed.
> Unfortunately I have a problem with 2GB (per process) virtual memory
> limit. Some advanced users use the application to create huge models and
> the tool reaches it's limits. In fact it would need up to 8GB in worst
> cases.
> Now I must find a solution for that. I have two ideas so far.
> 1. Create separate processes for data storage, do some inter-process
> communication and let windows take care of caching them to page file.
> 2. Create custom cache file on my own.
> Second solution would be easier for me but is it possible to outperform
> system page file ? Any other advice ?

You could get 3GB by editing the binary or use a 3GB switch. Another option
is it to make a 64-Bit COM DLL and use it out-of-process from your app. It
will be hosted using dllhost.exe, and the DLL could take advantage of the
64-Bit address space. I already did this to one of my applications using VC
2003, which doesn't have a 64-Bit compiler of its own. A free 64-Bit
compiler is included with the Platform SDK, and you can use it with the VC
Express edition, which doesn't normally include a 64-Bit compiler. Obviously
you can only load this DLL in a 64-Bit OS.

How to: Use Visual C++ Express Edition with the Microsoft Platform SDK(32
Bit only)
http://msdn.microsoft.com/en-us/library/ms235626(VS.80).aspx

Visual C++ Express 64-bit issues
http://social.msdn.microsoft.com/Forums/en/Vsexpressvc/thread/49681aee-ece9-4a1e-aa33-2e04aa053db3


From: David Schwartz on
On Feb 27, 10:28 am, "JmWro" <b...(a)adresu.i.juz> wrote:

> 2. Create custom cache file on my own.
> Second solution would be easier for me but is it possible to outperform
> system page file ? Any other advice ?

You're asking if apples would outperform oranges. Your custom cache
would control which pages of your cache file are mapped into your
limited address space. This is not at all like what the system paging
does because it actually moves data and you only move metadata.

Use a cache file and map and unmap pages as intelligently as you can.

DS
From: Tim Roberts on
"Nobody" <nobody(a)nobody.com> wrote:
>
>...Another option
>is it to make a 64-Bit COM DLL and use it out-of-process from your app. It
>will be hosted using dllhost.exe, and the DLL could take advantage of the
>64-Bit address space.

Perhaps you did not read the requirement that the solution must run on XP
32.
--
Tim Roberts, timr(a)probo.com
Providenza & Boekelheide, Inc.