2013-10-21 5 views
5

私はインタビューに出席したとき、インタビュアーは私にこの質問をしました。どのメモリがヒープ、スタックなどを使っているのですか?私はそれをgoogledしましたが、私は明確な答えを得ていませんでした。

+0

スタック/ヒープとは何ですか?私はそこから始めるだろう。また、彼らは彼らが話していたことを知っていたと確信していますか? – PeeHaa

+0

この質問は、PHPのコア開発者として働くことを計画している場合にのみ意味がありますが、その場合は質問に 'C 'タグを付ける必要があります。 – feeela

+1

開発中のメモリ管理については、 PHPで(PHP自体を開発するのとは対照的に)... Zendメモリマネージャー – Basic

答えて

5

$_POSTの値は、php_auto_globals_create_post()の内部に作成され、を参照するための方法です。PG(http_globals)[TRACK_VARS_POST]で利用できるようになりました。

前述http_globalsの定義は、それが(アレイもzval容器内に格納されている)等zval *要素、各$_POSTに対して1つ、$_GET$_COOKIEの配列のことを教えてくれる。従って答えはある、

  1. _emalloc()
  2. _malloc()

malloc()関数はヒープ上にメモリを割り当てる:zvalを割り当てる

は、次の機能を呼び出す、ALLOC_ZVAL()を介して行われヒープ

+0

ジャックは、PHPが@ KepaniHaoleが正しいと言ったことで開発されて以来、今混乱してきていますか? – Pramod

+1

@Pramod彼はC言語自体のグローバル変数を指しています。私は、PHP *のグローバル変数*がどのように格納されているかを参照しています。 –

+0

ありがとうございました。 – Pramod

7

あなたがCとタグ付けしているので、それから始めましょう。

Cランタイムでは、グローバル変数は2つの場所のいずれかに格納されます。データセグメントまたはBSSセグメントを含む。 特定の変数がどの変数に属しているかを判断する方法は、それが初期化されているかどうかです。

初期化グローバル(および静的)変数は、データセグメントの内側に行きます。

初期化されていないグローバル(および静的)変数は BSSセグメントの内側に行きます。

視覚的に、全体のランタイムは次のようになります。スタックと実行時に作成されているヒープ、上の変数とは異なり

_______ 
| Text | 
|_______| 
| Data | <-- Initialized globals/statics 
|_______| 
| BSS | <-- Uninitialized globals/statics (basically a bunch of 0s) 
|_______| 
|  | 
| Stack | 
|_______| 
|  | 
| Heap | 
|_______| 

、グローバル変数は、あなたの一部として存在してプログラムの実行可能イメージファイル(a.out,foobar.exe)。

+0

ありがとう、今私はそれのいくつかのアイデアを得た。しかし、まだ私は彼らがPHPで管理されているように疑問を抱いています。 – Pramod

関連する問題