所以我在这里提出了一个关于堆栈空间的非常基本的问题。我已经读过堆栈中的变量必须在编译时知道,但我不确定这是多么准确。我们来看看这个片段:
if (charArray != 0)
当然,编译器在编译时无法知道numProcesses的值,因此也就是arr []的大小。那么arr [numProcesses]是如何,何时何地分配的?感谢我确信这将是一个富有洞察力的答案。
答案 0 :(得分:1)
首先,我将回答何时以及如何回答。
argc将在编译时完成,因为它已知是什么。编译器将为此分配内存作为普通变量。 argv是动态部分,这将是运行时。编译器将再次为您分配内存,据我所知,也将其删除。
由于这个案例argc所需的内存量是已知的,因此它将在堆栈上,因为它的大小在编译时是已知的。 argv将在堆上,因为它是在运行时动态分配的,因为它的长度事先是未知的。
希望这有帮助!