好的,我会捅它.
第一:“堆栈”是用于标准C/C++类型程序中的函数调用跟踪的区域.它是操作系统和编程语言约定在内存中定义的一个地方,它被视为一个堆栈(数据结构).当你调用C函数fibbonaci(int i)时,它将变量i和已经忙于调用它的函数的返回地址放在堆栈上.这需要一些记忆.完成该函数调用后,内存再次可用.堆栈的大小有限.如果您在其上存储非常大的变量并进行许多递归调用,那么您可能会用完房间.对?
所以…..
显然,Zend有两种分配数据的方法:在堆上(一个更通用的区域来请求内存)和堆栈,并且堆栈是一个更有效的地方,因为事物的编程方式. (我不知道为什么,但我可以猜到.可能存在非常低级别的缓存问题 – 我希望堆栈在L1或L2缓存中比堆中的任意内存更有可能,因为CPU是很可能非常频繁地使用该区域 – 实际上每次调用一个函数时.堆数据访问也可能存在分配开销.)
我认为,在这种情况下,“密集型”数据是指很可能很快或非常频繁使用的数据.对这些变量使用更快的基于堆栈的分配是有意义的.你肯定会很快使用什么样的变量?那么,函数的参数怎么样?你很可能会使用它们:否则你为什么要打扰它们呢?它们也可能更像是小数据项(引用大量数据结构而不是大量数据结构本身 – 因为这会给你复制开销等等).因此堆栈可能对于为大多数PHP程序员存储PHP函数参数是有意义的……但它在递归时会更快失败.
希望至少回答“这是什么意思?”.对于您的递归性能问题:自己进行基准测试;它可能取决于你尝试做什么样的递归.