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
编译时间 ,这意味着这些变量的位置是由编译器生成的可执行代码决定并嵌入其中的,而不是编译器在工作时为它们腾出可用空间。 实际的动态内存分配是由生成的程序在运行时执行的。 |
Toniq · javascript为php保存多维数组 1 年前 |
Jannis · Java中数组的怪异行为 1 年前 |
callum · 如何识别数组中与给定序列不匹配的元素? 1 年前 |
tenfour · 如何使用数组元素的索引初始化数组元素 2 年前 |
Guillaume · 使用操作从Python列表创建numpy数组 2 年前 |
maxMas · Swift 5:为什么会出现索引超出范围错误? 2 年前 |