我正在阅读this网站,了解空间复杂性。它提到了以下情况:
函数是用值传递的语言编写的。因此,无论何时传递参数,都会为局部变量分配新内存。但是,您将指针传递给变量,因此您将通过引用传递。
网站说这不会为本地变量分配新的空间,因为你是通过引用传递的,所以变量已经存在于内存中,然后共享内存。
但它不会创建一个局部变量,它是指向内存位置的指针吗?并且,结果,分配新内存?
答案 0 :(得分:1)
是;在该帧的帧中为该调用分配了一个内存字。他们打算传达的是你没有为现有变量分配内存(例如1000字符的字符串为1kb)。形式上,这种分配是 O(1),而不是通过值传递的 O(n)。
如果 您不认为堆栈是流程内存的一部分,那么您可以为此案例分配零成本。另外,请注意 O(1)空间开销不会增加任何算法的复杂性,因此理论上可以忽略它。它有效,虽然它确实这样做有点奇怪。
答案 1 :(得分:0)
我对空间复杂性并不多,但通常会在堆栈上传递引用。有些系统完全将其保存在寄存器中,特别是如果函数是内联的,因此没有内存分配。
另请注意,在性能,安全性等方面,寄存器,堆栈和堆栈之间存在巨大差异。