就地址值而言,静态分配的数组的内存分配是不是总是连续的?
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 是的。
另外,如果我是正确的,如果他们没有保持顺序,他们将不得不保存额外的信息来获取不在的单元格,而他们不会这样做。所以它们“必须”保持连续。以上是关于就地址值而言,静态分配的数组的内存分配是不是总是连续的?的主要内容,如果未能解决你的问题,请参考以下文章