我有点困惑是在运行时还是编译时自动分配内存

Coderandhacker

我知道内存在编译时分配给自动变量,例如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. 如果数组在堆上,则分配由正在使用的堆分配器执行。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

确定`constexpr`执行-是在编译期间还是在运行时?

来自分类Dev

在运行时分配无成员类型与在编译时分配绑定

来自分类Dev

#ifdef内部的代码包含在运行时中还是在编译本身中?

来自分类Dev

__file和__dirname是在编译时还是在运行时求值的?

来自分类Dev

在运行时访问Android内存

来自分类Dev

在运行时(不是编译时)用具有不同签名的委托包装委托

来自分类Dev

Dart是静态编译的,还是在解析并加载到VM时在运行时插入代码?

来自分类Dev

使用malloc在运行时分配内存时出现分段错误

来自分类Dev

需要在运行时用动态生成和编译的java .classfile替换运行时的现有类

来自分类Dev

内联表达式是在运行时还是构建时编译的?

来自分类Dev

引用所有必需的程序集以获取运行时还是编译时?

来自分类Dev

词汇作用域绑定何时发生-在运行时还是编译时?

来自分类Dev

使用Dart在运行时/编译时生成类

来自分类Dev

以编程方式确定变量的值是在编译时还是在运行时计算的

来自分类Dev

我们知道我们可以在运行时访问任何内存,C中的作用域是否仅与编译时相关?

来自分类Dev

是在运行时还是在编译时对typeid(T)进行求值?

来自分类Dev

#ifdef内部的代码是包含在运行时中还是编译本身中?

来自分类Dev

__file和__dirname是在编译时还是在运行时求值的?

来自分类Dev

在运行时访问Android内存

来自分类Dev

类内成员初始化是在编译时还是在运行时进行?

来自分类Dev

使用malloc在运行时分配内存时出现分段错误

来自分类Dev

在运行时vs编译时构造BigInteger

来自分类Dev

在运行时具有自动布局的UIButton大小

来自分类Dev

使用Dart在运行时/编译时生成类

来自分类Dev

C# 'using system.X' 导入是在构建时编译还是在运行时从系统 DLL 中提取?

来自分类Dev

使用 const 时出错,我对使用 const 有点困惑

来自分类Dev

对 NSDecimalNumber 有点困惑?

来自分类Dev

在python构造函数中是在编译时还是运行时运行?

来自分类Dev

对我的 if 循环没有运行有点困惑?

Related 相关文章

  1. 1

    确定`constexpr`执行-是在编译期间还是在运行时?

  2. 2

    在运行时分配无成员类型与在编译时分配绑定

  3. 3

    #ifdef内部的代码包含在运行时中还是在编译本身中?

  4. 4

    __file和__dirname是在编译时还是在运行时求值的?

  5. 5

    在运行时访问Android内存

  6. 6

    在运行时(不是编译时)用具有不同签名的委托包装委托

  7. 7

    Dart是静态编译的,还是在解析并加载到VM时在运行时插入代码?

  8. 8

    使用malloc在运行时分配内存时出现分段错误

  9. 9

    需要在运行时用动态生成和编译的java .classfile替换运行时的现有类

  10. 10

    内联表达式是在运行时还是构建时编译的?

  11. 11

    引用所有必需的程序集以获取运行时还是编译时?

  12. 12

    词汇作用域绑定何时发生-在运行时还是编译时?

  13. 13

    使用Dart在运行时/编译时生成类

  14. 14

    以编程方式确定变量的值是在编译时还是在运行时计算的

  15. 15

    我们知道我们可以在运行时访问任何内存,C中的作用域是否仅与编译时相关?

  16. 16

    是在运行时还是在编译时对typeid(T)进行求值?

  17. 17

    #ifdef内部的代码是包含在运行时中还是编译本身中?

  18. 18

    __file和__dirname是在编译时还是在运行时求值的?

  19. 19

    在运行时访问Android内存

  20. 20

    类内成员初始化是在编译时还是在运行时进行?

  21. 21

    使用malloc在运行时分配内存时出现分段错误

  22. 22

    在运行时vs编译时构造BigInteger

  23. 23

    在运行时具有自动布局的UIButton大小

  24. 24

    使用Dart在运行时/编译时生成类

  25. 25

    C# 'using system.X' 导入是在构建时编译还是在运行时从系统 DLL 中提取?

  26. 26

    使用 const 时出错,我对使用 const 有点困惑

  27. 27

    对 NSDecimalNumber 有点困惑?

  28. 28

    在python构造函数中是在编译时还是运行时运行?

  29. 29

    对我的 if 循环没有运行有点困惑?

热门标签

归档