首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是VLA,它是如何实现的?

什么是VLA,它是如何实现的?
EN

Software Engineering用户
提问于 2015-04-19 10:59:48
回答 1查看 1.6K关注 0票数 1

大多数语言都支持堆中的可变长度数组,但我听说它们也可以存储在堆栈中。我很好奇什么语言支持这个构造,一些例子以及它们是如何实现的?

我更喜欢现代语言的例子,因为我不想用遗留代码(比如'C‘等)进行编码。

EN

回答 1

Software Engineering用户

发布于 2015-04-19 11:41:49

“可变长度数组”这个术语实际上是特定于C的,但听起来你对动态堆栈分配很感兴趣。为了检查,VLAs是在C99中添加的一个特性(然后在C11中是可选的),它允许以一个直到运行时才知道的大小声明数组。这意味着,一旦语言知道了大小,它就必须在运行时分配空间。未指定此运行时分配是在堆上完成还是在堆栈上完成。GCC碰巧使用了堆栈,但这不是必需的。

因此,从语言律师的角度来看,正确的答案可能是“没有语言可以做到”,因为我不知道任何语言中必须通过堆栈分配实现的任何标准特性。从实际角度来看,我的印象是这是一个非常特定于C的特性(许多人认为这是alloca()函数的标准替代),动态堆栈分配对于其他语言来说通常并不是一个非常有吸引力或可取的特性,部分原因是它很容易将堆栈吹灭,它给内存管理增加了另一个复杂的因素,而且最初也没有什么必要使用它。

如果您主要对“现代”语言感兴趣,那么现在很多语言都是垃圾收集的,所以是否使用堆/堆栈/静态/云/乙醚分配是一个您应该(几乎)不必考虑的实现细节。我不相信Rust、Go或Swift中的任何一个都有显式的堆栈分配(即使是那些允许数组大小在运行时之前未知的数组也似乎更像是一个std::向量而不是一个“原始”数组)。

票数 12
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/279565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档