存储初始化列表初始化的数组在哪里?

时间:2009-01-25 00:34:17

标签: c memory

鉴于这段代码:

(void)someFunction(void) {
    int array[] = {1,2,3,4,5,6,7,8,9,10};
}

存储数组的值在哪里?

  • 栈?
  • 堆?
  • 与那些字符串文字一起使用。 (它被称为高频堆吗?)
  • 其他地方?

我问,因为我不确定这个问题:

Create an array of integers property in objective-c

3 个答案:

答案 0 :(得分:9)

数组本身将在堆栈中。进入函数时会有一些代码将存储在全局/静态存储区中某些未命名数组中的值复制到堆栈上的本地数组中。具有初始值的未命名全局/静态数组可能与字符串文字位于相同的一般内存区域。

但是请注意,标准不需要这样做 - 但它几乎是任何编译器实现它的方式。一个足够聪明的编译器可能会注意到这些值只是递增的整数值,并且可能会产生一个循环以初始化本地数组,

(这个答案假设是C / C ++ - 我不知道Objective-C是否会改变这一点。)

答案 1 :(得分:1)

正如Micheal所说,初始化列表的值将存储在哪里取决于编译器和优化级别。例如,没有优化的gcc将生成代码以将常量移动到数组中的适当位置,即实际值将仅存储在代码本身中。如果不编译到目标代码,可以很容易地检查会发生什么,但是让编译器输出汇编程序。

答案 2 :(得分:-1)

如果有人在阅读本文时正在考虑使用C#,那么答案就不同了。数组是引用类型,因此值存储在堆上并在堆栈上引用。