就地址值而言,静态分配的数组的内存分配是不是总是连续的?

Posted

技术标签:

【中文标题】就地址值而言,静态分配的数组的内存分配是不是总是连续的?【英文标题】:Is memory allocation of statically allocated arrays always sequential in terms of address value?就地址值而言,静态分配的数组的内存分配是否总是连续的? 【发布时间】:2019-06-25 15:32:47 【问题描述】:

当我们在堆栈上创建一个数组时,比如int arr[20];,是否保证数组的每个单元在内存中相隔 4 个字节?或者可能会发生某些单元格没有按顺序分配的情况?

【问题讨论】:

是的,所有数组元素必须是连续的 保证数组中的每个int都位于数组中前一个int之后的sizeof(int)字节。 【参考方案1】:

数组保证存储在连续的内存中。指针算法是这样定义的

&arr[i] + 1 == &arr[i + 1]

【讨论】:

在标准 (§7.6.1.1 Subscripting) 中,这表示为 “表达式 E1[E2]*((E1)+(E2)) 相同(根据定义)”。 (你的答案是正确的,只是想添加参考) 那么,这个算法是否也适用于动态分配的数组? @Ayush 是的。 另外,如果我是正确的,如果他们没有保持顺序,他们将不得不保存额外的信息来获取不在的单元格,而他们不会这样做。所以它们“必须”保持连续。

以上是关于就地址值而言,静态分配的数组的内存分配是不是总是连续的?的主要内容,如果未能解决你的问题,请参考以下文章

C++数组在内存中的分配

指针变量声明了后其默认值是啥呢,啥时候它的值才为“null”空呢?

c语言数组在内存中是怎么分配的?

150809112 杨磊

sizeof和strlen的区别

C语言申请内存?