2013-10-21 14 views
5

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.

+0

Sai cosa è uno stack/heap? Vorrei iniziare da lì. Sei sicuro che sapessero di cosa stavano parlando? – PeeHaa

+0

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

+1

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

risposta

5

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:

  1. _emalloc()
  2. _malloc()

La funzione malloc() alloca memoria sul mucchio, in modo quindi la risposta è heap.

+0

Jack mi sto confondendo ora, dal momento che php è sviluppato in c quello che @KepaniHaole ha detto sarebbe corretto giusto? – Pramod

+1

@Pramod Si riferisce a variabili globali in C stesso; Mi riferisco a come vengono memorizzate le variabili globali * in PHP *. –

+0

Ok grazie capito. – Pramod

7

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).

+0

grazie, ora ne ho un'idea. Ma ho ancora dubbi come sono gestiti in php .. – Pramod

Problemi correlati