Quando ho partecipato a un'intervista, l'intervistatore mi ha fatto questa domanda. Quale memoria stanno usando heap, stack, ecc. Ho cercato su google ma non ho avuto una risposta chiara.
risposta
I valori di $_POST
internamente sono creati all'interno php_auto_globals_create_post()
e resi disponibili tramite PG(http_globals)[TRACK_VARS_POST]
, che è solo un modo per fare riferimento http_globals
.
La definizione del suddetto http_globals
ci dice che è un array di zval *
elementi, uno per ogni $_POST
, $_GET
, $_COOKIE
, ecc (array vengono anche memorizzati in un contenitore zval
).
Allocazione di un zval
avviene tramite ALLOC_ZVAL()
, che prevede le seguenti funzioni:
La funzione malloc()
alloca memoria sul mucchio, in modo quindi la risposta è heap.
Bene, dal momento che hai taggato C
, inizierò con quello.
Nel runtime C, le variabili globali sono memorizzate in una delle due posizioni; il segmento dati o il segmento BSS. Il modo in cui si determina a quale una particolare variabile appartiene è se è inizializzato o no.
inizializzati globali (e statici) variabili vanno all'interno del segmento dati.
non inizializzate globali (e statici) variabili vanno all'interno del segmento BSS.
Visivamente, l'intera fase di esecuzione assomiglia a questo:
_______
| Text |
|_______|
| Data | <-- Initialized globals/statics
|_______|
| BSS | <-- Uninitialized globals/statics (basically a bunch of 0s)
|_______|
| |
| Stack |
|_______|
| |
| Heap |
|_______|
A differenza delle variabili nello stack e la mucchio, che vengono creati in fase di esecuzione, esistono variabili globali come parte della vostra file di immagine eseguibile del programma (a.out
, foobar.exe
).
grazie, ora ne ho un'idea. Ma ho ancora dubbi come sono gestiti in php .. – Pramod
- 1. Dove sono memorizzate le variabili in Python?
- 2. Linux: dove sono memorizzate le variabili d'ambiente?
- 3. Dove sono le variabili costanti memorizzate in C?
- 4. In quale oggetto sono memorizzate le variabili globali di Javascript?
- 5. Dove sono memorizzate le variabili d'ambiente nel registro?
- 6. Le variabili di istanza sono le nuove variabili globali?
- 7. Come sono collegate le variabili globali nelle librerie condivise?
- 8. Dove vengono memorizzate le variabili catturate dalla chiusura?
- 9. Le variabili di stack C sono memorizzate al contrario?
- 10. PHP le variabili $ _POST sono a volte vuoto
- 11. Come vengono memorizzate le variabili nella ricorsione?
- 12. Le variabili globali scherzano
- 13. Dove sono memorizzate le variabili in una chiusura: stack o heap?
- 14. Dove sono memorizzate le variabili di istanza in un modulo helper di Rails?
- 15. Dove vanno le variabili locali statiche
- 16. Dove sono memorizzate le immagini della finestra mobile da boot2docker?
- 17. Dove sono memorizzate le macro registrate in Notepad ++?
- 18. Dove sono memorizzate le configurazioni di debug di Eclipse CDT?
- 19. C - struttura del programma (evitare variabili globali, include, ecc.)
- 20. Dove mettere le variabili globali in Rails 3
- 21. Obiettivo C - Dove affidi le variabili statiche globali?
- 22. È possibile raggruppare le variabili $ _POST?
- 23. Le variabili globali rallentare codice
- 24. Dove sono archiviate le variabili locali .NET?
- 25. Elenca tutte le variabili globali in Node.js
- 26. Rendere globali tutte le variabili
- 27. Le variabili globali sono sempre inizializzate a zero in C?
- 28. Utilizzando $ 1, $ 2, ecc variabili globali all'interno metodo definizione
- 29. Le variabili statiche di ASP.NET C# sono globali?
- 30. Le variabili globali sono thread safe in beuta?
Sai cosa è uno stack/heap? Vorrei iniziare da lì. Sei sicuro che sapessero di cosa stavano parlando? – PeeHaa
Questa domanda ha senso solo se hai intenzione di lavorare come sviluppatore principale PHP, ma in quel caso la domanda dovrebbe essere taggata con 'C' too ... – feeela
Non ho mai sentito parlare di nessuno che si preoccupi tanto della gestione della memoria quando si sviluppa in PHP (al contrario dello sviluppo di PHP stesso) ... Guarda il gestore della memoria Zend – Basic