在c中的主函数中初始化的变量存储在哪里?

在C语言中,我知道当使用malloc动态初始化一个变量时,它将存储在堆区中。 但是,在完成下面类型的声明并且稍后初始化变量时分配的内存在哪里。

int a[26];

要么

int a[n]; //n is a variable and each element in array a is later initialized through a for loop.

我最初的理解是,就像在java中一样,这里main函数中声明的所有变量都存储在堆栈区中。 我的疑问是 - 说,有一个函数需要数组“a”的地址并更改其内容。 要更改“a”的内容,它应该能够访问“a”中的每个元素的地址。 由于函数本身在主函数顶部的堆栈空间中执行,因此无法直接访问数组“a”的内容。 所以,我的疑问是数组“a”的内存分配在哪里?


通常, int a[n]; 被称为可变长度数组,并且存储分配与编译器相关。

例如, gcc在堆栈内存中分配VLA。

FWIW,局部变量通常也存储在堆栈内存中(如果有的话,减去编译器优化)。


数组几乎可以是任意长度,它们可以用来存储数千甚至数百万个对象,但是数组的大小必须在数组创建时决定。 数组中的每一项都可以通过索引来访问,索引只是一个数字,用于指示数组中存储对象的位置或插槽。

数组大小存储在计算机物理内存中

链接地址: http://www.djcxy.com/p/14479.html

上一篇: where are the variable stored that are initialized in main function in c?

下一篇: Dynamically allocated memory storage clarification