【问题标题】:C: Is an Anonymous Array Allocated on the Heap or Stack? [duplicate]C:匿名数组是分配在堆上还是栈上? [复制]
【发布时间】:2014-11-16 21:14:04
【问题描述】:

例如这里的代码:

char *s = "Hello";

“Hello”存储在哪里?它只是匿名存储在内存中吗?

【问题讨论】:

  • 什么是匿名的?我不明白。
  • 这个分配在可执行映像的RO-data部分。
  • @Jefffrey 如果我对匿名的看法有误,我深表歉意。我是 C 的菜鸟。我要去this page。我认为它是匿名的,因为“你好”没有名字。只有一个指向其地址的指针。
  • @Jefffrey:数组是匿名的。 s 不是,但 s 是指针,而不是数组。

标签: c pointers memory anonymous


【解决方案1】:

字符串字面量具有静态存储持续时间,并且分配在既不在堆栈也不在堆中的静态内存中。例如,它们可以分配在只读数据段中。

【讨论】:

  • 我认为没有理由反对它。这是有效的答案。
  • @Grzegorz Szpetkowski 如果知道原因可以讨论。
【解决方案2】:

C 标准没有定义字符串文字的存储位置(它甚至不使用堆栈或堆等术语)。它只告诉它具有静态存储持续时间。通常这意味着它位于 heap data segment

【讨论】:

  • 没有理由否决这个答案! C 语言标准确实没有定义应该分配变量的位置(据我所知,不仅是字符串文字,还有任何其他类型的变量)。一般要经过编译器实现。您可以添加一个概念,即在实践中,大多数体面的编译器都会在可执行映像的 RO 数据部分分配字符串文字。但肯定有人在这里玩弄选票。
  • @barakmanos:Grzegorz 是正确的,标准没有说明字符串文字的存储位置。但它们通常不位于堆上。堆是由mallocfree 管理的内存区域。堆栈、堆和静态数据区域通常是三个不同的区域。
  • @KeithThompson:哦,是的,我现在看到了答案的那一部分......我想我只读了第一句话(顺便说一句,这可以从我通常关于字符串文字的评论中推断出来位于 RO 数据部分)。
猜你喜欢
  • 2018-02-04
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 2011-10-11
  • 2021-10-13
相关资源
最近更新 更多