[ NrmMyth @ 12.08.2006. 07:07 ] @
Imam ovako dvije aplikacije:

Prva koja alocira neku memoriju na heapu, ispisuje adresu alociranog prostora i onda ceka.
Code:
int main( void )
{
    int *ptr = new int[3];
    ptr[0] = 13;
    ptr[1] = 14;
    ptr[2] = 15;
    
    cout << "Data Adress = " << ptr << endl;

    // na ovoj pauzi se ukljuci drugi program koji izmjeni memoriju pod 'ptr'
    system( "pause" );

    cout << "Current state:" << endl;
    cout << setw( 4 ) << ptr[0]  << setw( 4 ) << ptr[1] <<  setw( 4 ) << ptr[2] << endl;
    
    system( "pause" );
     
    delete[] ptr;

   return 0;
}


Druga koja pokusava preko adrese memorije iz gornje izmjeniti sadrzaj. Pokrene se dok gornja ceka.
Code:
int main( void )
{
    int add;
    cout << "Give me an adress: ";
    cin >> add;
    
    int* ptr;
    ptr = add;
    
    ptr[0] = 113;
    ptr[1] = 114;
    ptr[2] = 115;

   system( "pause" );
   return 0;
}


- Prva greska: ne mogu explicitno dodijeliti adresu pokazivacu.
- Druga sumnja: Nesto mi govori da ovakav pristup nece raditi iz cisto sigurnosnih zastita koje provode operativni sistemi.

Koliko znam OS (bar win) dodijeli aplikacijama memorijski prozor van kojega ne mogu ici (opet sigurnost). U njemu onda adrese mogu biti relativne na pocetak tog prozora, a ne u ondnosu na pocetak globane memorije....

Pitanje se namece: Kako cu dijeliti memoriju medju procesima?

Hvala.
[ kiklop74 @ 12.08.2006. 18:18 ] @
Kao sto si i sam rekao takav nacin deljenja memorije nije moguc.

Zajednicka memorija za vise procesa (shared memory) postoji ali je veoma vezana za samu platformu tj. operativni sistem.

Generalno taj problem se resava sa memorijski mapiranim fajlovima.

Za one koji rade na *NIX platformama jedan od linkova je ovaj:

http://fscked.org/writings/SHM/shm.html

Za windows evo takodje nekih linkova:

http://msdn.microsoft.com/libr...us/dnanchor/html/memoryank.asp

http://msdn2.microsoft.com/en-us/library/h90dkhs0.aspx

http://www.codeproject.com/threads/SharedMemory_IPC_Threads.asp

U sustini sistem je sledeci - kreira se memorijski mapirani fajl sa paarmetrima za deljenje. Svaki program pre nego sto krene nesto da radi sa tim delom memorije treba da proveri da li je mutex slobodan, tj. da li neko drugi nesto radi sa tim delom memorije. Ako jeste program kreira svoju instancu mutexa i tako efektivno slignalizira ostalim procesima da je memorija nedostupna za izmene. Kada zavrsi sa radom oslobodi se mutex.

[ NrmMyth @ 12.08.2006. 21:16 ] @
Informirati cu se.
Jedno pitanje ovako unaprijed: Dali se kod tih mapiranih fajlova radi bas o fajlovima ili RAM memoriji. Interesira me zbog performansa.
[ Goran Arandjelovic @ 12.08.2006. 22:26 ] @
Ono gde zapravo pišeš jeste file descriptor, ali je ta deljena memorija u RAM-u...
[ JagodaV @ 13.08.2006. 06:32 ] @
Da, deljena memorija se nalazi u RAM-u. Na UNIX sistemima se jos koristi i IPC za koordinaciju medju procesima.