Sto cercando una risposta definitiva (se effettivamente ne esiste una) su quanta memoria deve essere allocata quando si creano blocchi statici di memoria condivisa tramite managed_shared_memory
boost::interprocess
. Anche official examples sembra allocare blocchi di memoria arbitrarily large.Quanta memoria deve allocare "managed_shared_memory"? (boost)
consideri la seguente struttura:
// Example: simple struct with two 4-byte fields
struct Point2D {
int x, y;
};
mia reazione iniziale è che la dimensione necessaria sarebbe 8 byte, o sizeof(Point2D)
. Questo fallisce miseramente quando tento di costruire un oggetto, dandomi errori di seg in runtime.
// BAD: 8 bytes is nowhere near enough memory allocated.
managed_shared_memory segment(create_only, "My shared memory", sizeof(Point2D));
Quale operazione di lettura/scrittura sta causando errori seg.? Operazioni di stack? Assegnazioni temporanee entro segment.construct()
? Quanto sovraccarico è necessario quando si assegna memoria condivisa?
Per tentativi ho rilevato che moltiplicare la dimensione per 4 può funzionare per la struttura precedente, ma si riduce quando aggiungo altri campi al mio struct
. Quindi, puzza di un brutto attacco.
Alcuni potrebbero obiettare che "la memoria è a buon mercato" nel PC moderno, ma non sono d'accordo con questa filosofia e non mi piace allocare più del necessario, se posso evitarlo. Ho esaminato i documenti Boost ieri e non sono riuscito a trovare alcun suggerimento. Ecco per imparare qualcosa di nuovo oggi!
Le persone potrebbero non essere d'accordo con me qui, ma non ho mai scritto nella mia vita sulla falsariga di "la memoria è economica". L'acquisto di memoria non è necessariamente costoso rispetto a come era una volta, ma è molto simile al denaro. Più hai, più spendi. Ogni aggiornamento di memoria che ho acquistato per il mio computer, ho raggiunto il limite massimo ora che posso "eseguire più cose". Ho sempre cercato di codificare in modo conservativo in questo senso, perché non è necessariamente economico * per la mia applicazione *. Comunque, solo il mio 2c su quello :) –
Sono d'accordo al 100%! E questa è la ** completa ** ragione per cui sto facendo questa domanda. Ho solo buttato fuori quel commento per dissuadere chiunque dicesse "a chi importa, basta assegnare 1k e averne fatto." Proverò a renderlo più chiaro nel post. –
Ah ok :) "Qualcuno potrebbe obiettare" è molto meglio! –