命令行参数作为数组的大小:编译时间还是运行时间?

时间:2016-02-20 02:50:43

标签: c stack command-line-arguments compile-time

所以我在这里提出了一个关于堆栈空间的非常基本的问题。我已经读过堆栈中的变量必须在编译时知道,但我不确定这是多么准确。我们来看看这个片段:

if (charArray != 0)

当然,编译器在编译时无法知道numProcesses的值,因此也就是arr []的大小。那么arr [numProcesses]是如何,何时何地分配的?感谢我确信这将是一个富有洞察力的答案。

1 个答案:

答案 0 :(得分:1)

首先,我将回答何时以及如何回答。

argc将在编译时完成,因为它已知是什么。编译器将为此分配内存作为普通变量。 argv是动态部分,这将是运行时。编译器将再次为您分配内存,据我所知,也将其删除。

由于这个案例argc所需的内存量是已知的,因此它将在堆栈上,因为它的大小在编译时是已知的。 argv将在堆上,因为它是在运行时动态分配的,因为它的长度事先是未知的。

希望这有帮助!