c - 这是静态内存分配还是动态内存分配的例子?

标签 c memory-management dynamic-memory-allocation static-memory-allocation

我研究了很多静态和动态内存分配,但仍然有一个困惑:

int n, i, j;
printf("Please enter the number of elements you want to enter:\t");
scanf("%d", &n);
int a[n];
for (i = 0; i < n; i++)
{
    printf("a[%d] : ", i + 1);
    scanf("%d", &a[i]);
}

int a[n] 属于静态还是动态内存分配?

最佳答案

C 标准不讨论动态分配(或静态分配,就此而言)。但它确实定义了存储持续时间:静态、自动、线程和已分配。这决定了一个对象(一段数据)的生命周期(可用)。

  • Static 在存储持续时间的意义上意味着该对象可用于整个程序的执行。文件范围内的变量(“全局”变量)和声明中带有 static 的局部变量具有静态存储持续时间。

  • Automatic 存储持续时间是您的常规局部变量,它们仅在声明它们的 block 的持续时间内存在(函数,或在例如 的花括号内) for 循环)。

  • Allocated 存储持续时间是指通过malloc 和 friend 获得的内存。它从(成功)调用 malloc 开始可用,直到相应的调用 free。这通常称为动态内存分配,因为它是一种获取大小在运行时确定的内存块的方法。

您的变量 a 具有自动存储期限。然而,它可以被认为是动态的,因为它的长度是在运行时而不是编译时确定的。就像分配的存储持续时间一样。

关于c - 这是静态内存分配还是动态内存分配的例子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47781883/

相关文章:

c - C 中的堆没有释放

c - 如何检查字符串是否匹配模式 C

c++ - 如何将多个包裹一起寄送?

c - 我需要在第 17 行的哪里放置额外的分号

c - 双指针 vs 指针数组(**array vs *array[])

c++ - 操作动态内存,重载一个const成员函数有意义吗?

c - 前缀树中的插入和搜索实现

php - PHP数组中的内存优化

iPhone 内存管理

objective-c - cocos2d 和 objective C 中的赋值或保留