15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Shared memory

Xavier PILLONS -- 100335.221@compuserve.com
Thursday, September 05, 1996

Environment: VC4.2, Win95, NT 3.51

I would like to allocate dynamically classes in shared memory used by Dll InProc
Server. How doing this ?
I know that I can use #pragma to define shared data segments, but this is for
global variables.
May I use memory mapped file ? If so, how ?

All tips and suggestions would be appreciate.

Xavier Pillons
Software Engineer
SETE Inc.




Tomasz Pawlowski -- tomasz@ashtech.COM
Thursday, September 05, 1996

     Allocate memory using memory mapped files and then use "placement new" 
     to construct your class at specified address. Something like this:
     
     ptr = pointer to mapped memory  
     T *TObject = new ( ptr ) T;
     
     Tomasz
     
     tomasz@ix.netcom.com
     tomasz@ashtech.com
     
     


______________________________ Reply Separator _________________________________
Subject: Shared memory
Author:  mfc-l@netcom.com at smtp-ccmail
Date:    9/5/96 7:49 AM


Environment: VC4.2, Win95, NT 3.51
     
I would like to allocate dynamically classes in shared memory used by Dll InProc
Server. How doing this ?
I know that I can use #pragma to define shared data segments, but this is for 
global variables.
May I use memory mapped file ? If so, how ?
     
All tips and suggestions would be appreciate.
     
Xavier Pillons
Software Engineer
SETE Inc.
     




Xavier PILLONS -- 100335.221@compuserve.com
Monday, September 09, 1996

I've tried to do what you suggest, but it is not possible. So I
re-write the new and delete operator for the class TObject to use
memory mapped file. But this work fine if this class don't use others
static classes. If I use a CMap in TObject, I can't tell CMap to use
memory mapped files.

So how using shared memory with dynamic classes like map, list, CString ...?


Xavier Pillons
Software Engineer
SETE Inc.


>
>De : 	"Tomasz Pawlowski"[COMPUSERVE:INTERNET:tomasz@ashtech.COM]
>Date :	vendredi 6 septembre 1996 06:31
>A :	INTERNET:MFC-L@NETCOM.COM
>Objet :	Re: Shared memory
>
>
>     Allocate memory using memory mapped files and then use "placement new" 
>     to construct your class at specified address. Something like this:
>     
>     ptr = pointer to mapped memory  
>     T *TObject = new ( ptr ) T;
>     
>     Tomasz
>     
>     tomasz@ix.netcom.com
>     tomasz@ashtech.com
     
     






Jerry Coffin -- jcoffin@taeus.com
Wednesday, September 11, 1996

At 07:49 AM 9/5/96 EDT, you wrote:
>Environment: VC4.2, Win95, NT 3.51
>
>I would like to allocate dynamically classes in shared memory used by Dll
>InProc Server. How doing this ?

There are basically two different ways to do this.  One possibility is to
manually allocate the shared memory by the usual method (MapViewOfFile,
passing -1 as the file handle) and then do a placement new in that memory.

The other possibility is to override new() for the class instead.  This
encapsulates placing the class in shared memory into the class itself, and
other code doesn't have to worry about it.

Generally the decision as to which method to use is fairly easy: if it's a
characteristic of the class that all its instances will always be in shared
memory, then override new() in the class to ensure that.  If the class can
be placed in shared memory or not, depending on the situation, then
placement new is the way to go.  If you're going to use the class in shared
memory a great deal, it may be worth deriving a new class to override new()
and make it a characteristic of the class.




Xavier PILLONS -- 100335.221@compuserve.com
Friday, September 13, 1996

Jerry Coffin, at 12 Sep 1996 09:33:08 (PDT) wrote:

>At 07:49 AM 9/5/96 EDT, you wrote:
>>
>>Environment: VC4.2, Win95, NT 3.51
>>I would like to allocate dynamically classes in shared memory used by Dll
>>InProc Server. How doing this ?
>
>There are basically two different ways to do this.  One possibility is to
>manually allocate the shared memory by the usual method (MapViewOfFile,
>passing -1 as the file handle) and then do a placement new in that memory.
>
>The other possibility is to override new() for the class instead.  This
>encapsulates placing the class in shared memory into the class itself, and
>other code doesn't have to worry about it.
>
>Generally the decision as to which method to use is fairly easy: if it's a
>characteristic of the class that all its instances will always be in shared
>memory, then override new() in the class to ensure that.  If the class can
>be placed in shared memory or not, depending on the situation, then
>placement new is the way to go.  If you're going to use the class in shared
>memory a great deal, it may be worth deriving a new class to override new()
>and make it a characteristic of the class.

Ok for overriding new() in the class, but if I want to use a collection or a map
of this class, how using shared memory with maps ? And if my class use CString
or other dynamic classes, how using shared memory for them, does I need to
override new() for each classes used in the principal class ?


Xavier Pillons			33 01 41 39 17 07
Software Engineer		100335.221@compuserve.com
SETE Inc.






Jerry Coffin -- jcoffin@taeus.com
Sunday, September 15, 1996

At 04:28 AM 9/13/96 EDT, you wrote:
[ wanting to put classes into shared memory... ] 

>Ok for overriding new() in the class, but if I want to use a collection or
a map
>of this class, how using shared memory with maps ? And if my class use
>CString or other dynamic classes, how using shared memory for them, does I
>need to override new() for each classes used in the principal class ?

Most (all?) of the STL collections have you pass an allocator object to them
that they use to allocate/free memory for the objects in the collection.
This should the right place to handle putting the collection into shared memory.





| Вернуться в корень Архива |