gpt4 book ai didi

命令行参数作为数组的大小 : Compile time or run time?

转载 作者:行者123 更新时间:2023-11-30 15:11:42 24 4
gpt4 key购买 nike

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

int main(int argc, char*argv[])
{
int numProcesses = argv[1];
int arr[numProcesses] = {};
...
}

自然地,编译器在编译时无法知道 numProcesses 的值以及 arr[] 的大小。那么 arr[numProcesses] 是如何、何时、何地分配的呢?感谢您的回答,我相信这将是一个富有洞察力的答案。

最佳答案

首先我会回答何时、如何然后在哪里。

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

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

希望这有帮助!

关于命令行参数作为数组的大小 : Compile time or run time?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35518539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com