當我參加面試時,面試官問我這個問題。他們正在使用堆,堆棧等內存。我使用了它,但我沒有得到任何明確的答案。
5
A
回答
5
$_POST
內部的值在php_auto_globals_create_post()
內部創建,並通過PG(http_globals)[TRACK_VARS_POST]
創建,這只是引用http_globals
的一種方法。
的上述http_globals
定義告訴我們它的zval *
元件,一個用於每個$_POST
,$_GET
,$_COOKIE
等(陣列也存儲一個zval
容器內)的陣列。
分配一個zval
經由ALLOC_ZVAL()
完成,這調用以下功能:
的malloc()
函數在堆上分配內存,因此,因此答案爲堆。
7
那麼,既然你標記了C
,我會從那開始。
在C運行時,全局變量存儲在兩個地方之一;數據段或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
相關問題
- 1. 存儲在內存中的DLL的全局變量在哪裏?
- 2. 靜態存儲在內存中的全局變量在哪裏?
- 3. .NET局部變量存儲在哪裏?
- 4. FORTRAN在哪裏存儲局部變量?
- 5. 在PHP中,全局聲明的變量存儲在哪裏?
- 6. 變量存儲在哪裏?
- 7. Firefox 49開發工具,其中「存儲爲全局變量」存儲在哪裏?
- 8. 全局設置存儲在哪裏?
- 9. GCC全局變量存儲
- 10. Rails全局變量去哪裏?
- 11. 揮發性變量存儲在哪裏?
- 12. Python中的變量存儲在哪裏?
- 13. $ _SESSION變量存儲在哪裏?
- 14. nodejs在哪裏存儲變量?
- 15. 在哪裏存儲javascript變量
- 16. selenium webdriver:存儲變量在哪裏?
- 17. JSFiddle在哪裏存儲我的變量?
- 18. golang環境變量存儲在哪裏?
- 19. 哪裏存儲數據庫連接和全局變量在struts 1.3
- 20. 瀏覽器在哪裏存儲用let或const定義的全局變量?
- 21. 在哪裏存儲局部變量? NSKeyedArchiver或NSUserDefaults?
- 22. Java最終局部變量存儲在哪裏?
- 23. 方法局部變量存儲在哪裏?
- 24. Javascript全局變量存儲在哪個對象中?
- 25. 存儲在變量棧中的變量在哪裏?
- 26. PHP $ _POST空 - 變量存儲在$ _REQUEST
- 27. PHP全局變量
- 28. .NET - 將URL存儲爲全局變量
- 29. 全局變量(存儲器綁定)
- 30. Rails,js變量的全局存儲
你知道堆棧/堆是什麼嗎?我會從那裏開始。你是否確定他們知道他們在說什麼? – PeeHaa
這個問題只有在你打算作爲一個PHP核心開發者工作時纔有意義,但是在這種情況下,這個問題也應該用'C'來標記... – feeela
我從來沒有聽說過任何人關心內存管理在PHP中(而不是開發PHP本身)...看看Zend內存管理器 – Basic