2017-11-11 191 views
0

当我们声明C中的阵列...阵列基本上是存储有该数组的基地址..数组存储在C中的位置?

对于离指针:

int *x=malloc(5); 

给出用于堆该阵列的“x”的存储器现在

,我的问题是that..where没有内存将被分配给这种类型的数组声明

int x1[5]; 

假设两个“X” &'x1'在函数中声明。

'x1'在哪里记忆。 它在堆栈中吗?或在堆?

+4

对于'x1'来说真的取决于定义的作用。还要注意,C规范并没有提到任何有关“堆栈”或“堆栈”的内容。 *本地*变量*通常*最终在堆栈上只是一个实现细节。 –

+1

还要注意,如果'x'被定义为一个函数中的局部变量,那么您有两个*分配:一个用于变量'x'本身,另一个用于调用'malloc'分配的内存。谈到'malloc',C规范并没有真正说出“堆”在哪里或哪种内存。 –

+0

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

回答

-1

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

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

+0

是否有任何方法来使用函数中声明的指针在堆栈中分配内存? –

+0

请回答上面的意见 –

0

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

+2

C标准没有提到堆栈。实现C标准对具有自动存储持续时间的对象所要求的行为的常见方式是使用堆栈,并且如果使用调试器或其他方式进行检查,则可以在堆栈中找到许多对象。但是C实现可能使用其他方法。对于这样一个小阵列,它可能完全保留在寄存器中。 –