鉴于这段代码:
(void)someFunction(void) {
int array[] = {1,2,3,4,5,6,7,8,9,10};
}
存储数组的值在哪里?
我问,因为我不确定这个问题:
答案 0 :(得分:9)
数组本身将在堆栈中。进入函数时会有一些代码将存储在全局/静态存储区中某些未命名数组中的值复制到堆栈上的本地数组中。具有初始值的未命名全局/静态数组可能与字符串文字位于相同的一般内存区域。
但是请注意,标准不需要这样做 - 但它几乎是任何编译器实现它的方式。一个足够聪明的编译器可能会注意到这些值只是递增的整数值,并且可能会产生一个循环以初始化本地数组,
(这个答案假设是C / C ++ - 我不知道Objective-C是否会改变这一点。)
答案 1 :(得分:1)
正如Micheal所说,初始化列表的值将存储在哪里取决于编译器和优化级别。例如,没有优化的gcc将生成代码以将常量移动到数组中的适当位置,即实际值将仅存储在代码本身中。如果不编译到目标代码,可以很容易地检查会发生什么,但是让编译器输出汇编程序。
答案 2 :(得分:-1)
如果有人在阅读本文时正在考虑使用C#,那么答案就不同了。数组是引用类型,因此值存储在堆上并在堆栈上引用。