【问题标题】:Where are arrays stored in C? [duplicate]数组在 C 中存储在哪里? [复制]
【发布时间】:2017-11-11 05:32:15
【问题描述】:

当我们在 C 中声明一个数组时...数组基本上是一个存储该数组基地址的指针..

例如:

int *x=malloc(5);

为堆中的那个数组“x”提供内存

现在,我的问题是......内存将分配给这种类型的数组声明

int x1[5];

假设 'x' &'x1' 都在函数中声明。

“x1”在内存中的位置。 它在堆栈中吗?还是在堆中?

【问题讨论】:

  • 对于x1,这实际上取决于定义的位置。还要注意,C 规范并没有真正提及“堆栈”或“堆栈”。 local 变量通常 最终位于堆栈上只是一个实现细节。
  • 另请注意,如果x 被定义为函数中的局部变量,则您有两个 分配:一个用于变量x 本身,一个用于分配的内存致电malloc。谈到malloc,C 规范并没有真正说明“堆”在哪里或是什么样的内存。
  • '当我们在C中声明一个数组时......数组基本上是一个指针,存储着该数组的基地址'没有。

标签: c arrays memory


【解决方案1】:

如果 int x1[5]; 没有在任何函数中定义,则数组 x1 在程序的 bss 段上,变量 x1 是全局数组。

如果 int x1[5]; 在任何函数中定义,则数组 x1 在执行此函数期间位于程序的堆栈中。

【讨论】:

  • 有没有办法使用函数中声明的指针在堆栈中分配内存??
  • 请回答上面的评论
  • @Nitesh_Adapa 它叫“_alloca”或“_malloca”
【解决方案2】:

我相信int x1[5]; 会进入堆栈。

【讨论】:

  • C 标准没有提到堆栈。实现 C 标准对具有自动存储持续时间的对象所要求的行为的一种常见方法是使用堆栈,如果使用调试器或其他方式检查,会在堆栈上找到如此多的对象。但是 C 实现可以使用其他方法。对于这么小的数组,它可能会完全保存在寄存器中。
猜你喜欢
  • 2014-11-06
  • 2016-10-05
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 2015-07-18
相关资源
最近更新 更多