【发布时间】:2018-06-06 22:27:15
【问题描述】:
在 c(和 c++)中,可以通过以下方式创建整数数组:
int a[const];
其中 const 是编译时常量,或者
int *a = (int *) malloc(...);
根据我的理解,第一个在栈上分配内存,第二个在堆上。现在,据我所知,堆栈上的内存是有序的,以便程序可以根据需要将其从顶部弹出。这意味着数组中的元素不一定按顺序存储,这听起来很奇怪。
这里到底发生了什么?
编辑:
感谢大家的回复。通过您的回答和一些后续谷歌搜索,我找到了我困惑的根源。我假设程序只会真正使用堆栈的顶部变量,并将它们一一打开/关闭。
【问题讨论】:
-
为什么不按顺序存储元素?否则它们将如何存储?
-
@Anton Quelle 不清楚您为什么做出以下简历:“这意味着数组中的元素不一定按顺序存储”
-
一旦将
a传递给函数,就无法知道指针的来源是什么,因此机制必须 相同。所以它是一样的。 -
@TonyTannous 但数组保证是连续的。
-
数组的元素总是按顺序存储的(而且是连续的!)。阵列生命周期的管理是完全不同的事情。此外,“堆”和“堆栈”在一段时间内(20 年或更长时间)一直是不准确的描述。