2015-07-25 30 views
9

In base alla Documentazione sul buffer JS del nodo, "Un buffer è simile a un array di numeri interi ma corrisponde a un'allocazione di memoria non formattata all'esterno dell'heap V8". Non vengono fornite ulteriori informazioni.In che modo i dati del buffer JS del nodo sono archiviati dietro le quinte?

La domanda è come i dati sono memorizzati nella RAM. Il buffer JS del nodo usa un modo speciale di allocare spazio sull'heap? È soggetto alla stessa garbage collection dell'heap di V8? Sono sicuro di presumere che qualsiasi modifica ai dati in un buffer modifichi effettivamente i dati nella RAM e che non rimangano residui residui dei dati per i ficcanaso?

Mi spiace per la domanda molto ampia, ma non riesco a trovare alcun materiale su come funziona effettivamente. La ragione per cui la sto chiedendo è perché voglio essere sicuro che le variabili che uso nella mia applicazione non rimangano nella memoria più a lungo di quanto sia necessario.

Documenti: https://nodejs.org/api/buffer.html#buffer_class_buffer

Cheers!

+0

@ jfriend00 Dovresti lasciarlo come risposta. – mscdex

risposta

6

Il codice sorgente del nodojs per l'implementazione dei buffer è http://github.com/joyent/node/blob/master/lib/buffer.js e http://github.com/joyent/node/blob/master/src/node_buffer.cc. Se vuoi veramente conoscere i dettagli di come funziona, puoi studiare il codice reale.

Per quanto riguarda le vostre domande ...

La domanda è: come i dati vengono memorizzati in RAM. Il buffer JS del nodo utilizza un modo speciale di allocare spazio nell'heap?

Per il codice sorgente, sono presenti sia allocazioni di heap sia un pool di memoria coinvolto nella memoria allocata agli oggetti buffer. Quando ciascuno viene utilizzato dipende dai dettagli di come viene utilizzato.

È soggetto alla stessa garbage collection dell'heap di V8?

Sì, la garbage collection funziona con gli oggetti Buffer. È possibile che gli oggetti implementati con codice nativo partecipino alla garbage collection se seguono una serie rigorosa di regole nella loro implementazione.

Sono al sicuro supporre che qualsiasi modifica dei dati in un buffer in realtà modifica i dati in RAM, e che non resti residue dei dati è lasciato per spioni?

Sì, quando si modificano i dati in un buffer, lo fa in realtà modificare i dati nella RAM (non c'è altro posto per memorizzare il cambiamento oltre RAM se non è stata memorizzata solo sul disco, che non è il caso).

Per quanto riguarda "nessun residuo residuo dei dati lasciati per i ficcanaso", è difficile da dire. È molto comune nella programmazione che quando gli elementi heap o gli elementi raggruppati crescono o si riducono, i loro dati possono essere copiati in un diverso pezzo di RAM e il vecchio, ora liberato o riciclato blocco di RAM può ancora avere una copia di alcuni o tutti dati originali A meno che non sia stato specificato in modo specifico, la RAM appena assegnata potrebbe essere stata utilizzata per qualcos'altro prima e potrebbe ancora contenere informazioni relative a tale uso precedente.

D'altra parte, scrivere su un oggetto Buffer scrive direttamente nella RAM assegnata/assegnata a quell'oggetto Buffer (purché non si modifichi la sua dimensione) quindi se si desidera ridurre le quote che i tuoi dati vengano lasciati nella RAM, puoi sovrascrivere i dati nell'oggetto Buffer quando hai finito.

+0

Ottima risposta! Grazie compagno! –