gpt4 book ai didi

堆栈上的 C 数组

转载 作者:太空宇宙 更新时间:2023-11-04 05:16:27 24 4
gpt4 key购买 nike

在 c(和 c++)中,可以通过以下方式创建整数数组:

int a[const];

其中 const 是编译时常量,或者

int *a = (int *) malloc(...);

按照我的理解,第一个在栈上分配内存,第二个在堆上。现在,据我所知,堆栈上的内存是有序的,以便程序可以根据需要将其从顶部弹出。这意味着数组中的元素不一定按顺序存储,这听起来很奇怪。

这里究竟发生了什么?

编辑:

谢谢大家的回复。通过您的回答和一些跟进的谷歌搜索,我找到了我困惑的根源。我假设该程序只会真正使用堆栈的顶部变量,并将它们一个接一个地弹出/关闭。

最佳答案

虽然抽象 C 语言没有说明本地对象是如何分配的(即没有明确引用“堆栈”语言规范),但本地对象的存储持续时间与堆栈的 LIFO 属性很好地对齐:本地对象在它们的创建顺序相反。 最后创建的对象最先被销毁,反之亦然。

此原则统一适用于所有本地对象。数组也不异常(exception)。每个数组只是一个适当大小的连续内存字节 block (顺便说一句,对于任何类型的对象都是如此)。数组没有什么特别的。没有理由不按顺序存储数组元素。

每个数组对象都是在栈顶创建的。当数组对象到达其存储持续时间的末尾时,就像您说的那样,它只是“从顶部弹出”。到那时,堆栈中可能位于其上方的任何东西都应该已经弹出。

关于堆栈上的 C 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47972476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com