|
|
1
73
这不是“静态内存分配”。您的阵列
语言规范没有规定任何特定的分配机制,但在典型的实现中
对于VLA
其主要目的是
与您的示例一样,VLA不提供这种“破坏范围”的功能。您的阵列
但在特定情况下,当你不需要“打败范围”而只需要使用
|
|
|
2
11
在C语言中,编译器支持VLAs(可变长度数组)的方式取决于编译器-它不必使用
|
|
|
3
10
可变长度数组的内存显然不能静态分配。但是,它可以在堆栈上分配。通常,这涉及使用“帧指针”来跟踪函数堆栈帧的位置,以应对堆栈指针的动态确定更改。 当我试图编译你的程序时,实际发生的事情似乎是可变长度数组得到了优化。所以我修改了你的代码,迫使编译器实际分配数组。
使用gcc 6.3为arm编译Godbolt(使用arm,因为我可以阅读arm ASM)将其编译为 https://godbolt.org/g/5ZnHfa . (我的评论)
|
|
|
4
3
该构造的内存称为“可变长度数组”,VLA,在堆栈上分配,分配方式与
[1] 对于使用“向零增长”堆栈的典型处理器。 |
|
|
5
0
编译时间 ,这意味着这些变量的位置是由编译器生成的可执行代码决定并嵌入其中的,而不是编译器在工作时为它们腾出可用空间。 实际的动态内存分配是由生成的程序在运行时执行的。 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
|
bairog · 从按属性筛选的对象数组字典中创建值数组 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |
|
|
Geremia · 2D NumPy数组+1D数组? 1 年前 |
|
|
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 1 年前 |
|
|
Paul Williams · 迭代数组时输出有问题 1 年前 |