我去面试的时候,面试官问了我这个问题。他们使用的是堆、堆栈等内存。我用谷歌搜索了它,但没有得到任何明确的答案。
问问题
2373 次
2 回答
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
) 的一部分存在。
于 2013-10-21T07:28:43.833 回答
5
internal的值$_POST
是在内部创建php_auto_globals_create_post()
并通过 提供PG(http_globals)[TRACK_VARS_POST]
的,这只是一种引用方式http_globals
。
前面的定义http_globals
告诉我们它是一个元素数组,zval *
每个元素一个$_POST
, $_GET
,$_COOKIE
等(数组也存储在zval
容器中)。
分配 azval
是通过 完成ALLOC_ZVAL()
的,它调用以下函数:
该malloc()
函数在堆上分配内存,因此答案是heap。
于 2013-10-21T09:18:02.147 回答