【问题标题】: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)字节。

标签: c++ arrays memory-management


【解决方案1】:

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

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

【讨论】:

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