gpt4 book ai didi

c - 我有点困惑,自动内存分配是在运行时还是编译时发生

转载 作者:太空宇宙 更新时间:2023-11-04 07:59:11 25 4
gpt4 key购买 nike

我知道内存在编译时分配给自动变量,如 int a; 并存储在堆栈中,但如果是变量数组,其输入是从用户那里获取的,例如

#include<stdio.h>
main()
{
int n;
printf("enter the size of array");
scanf("%d",&n);
int a[n];
.......
}

内存是在运行时分配的。所以我的问题是,自动分配是否取决于具体情况。谢谢

最佳答案

在您的示例中,不清楚“a”的定义位置。因此,我将尝试通过对此做出假设来回答这个问题。

  1. 如果数组被声明为全局数组,它驻留在 bss 段中,并且在将段加载到内存中时分配内存。
  2. 如果数组在堆栈上,并且数组的大小在编译时已知,则移动堆栈指针以为数组分配空间。如果反汇编代码,您可以看到这一点。
  3. 如果数组在堆栈上,但空间是根据函数的参数分配的,则您有一个 VLA(可变长度数组)。这些通常由编译器转换为“alloca”调用。在这种情况下,堆栈指针只是移动到堆栈上分配的“n”个字节。
  4. 如果数组在堆上,则分配由正在使用的堆分配器执行。

关于c - 我有点困惑,自动内存分配是在运行时还是编译时发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47916228/

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