0

main() 中的变量何时分配?特别是为指向数组 arr 和 2d 的指针分配了多少内存,如下所示:

int main()
{
  float a, b;
  int *b;
  float *(arr)[6];
  float *(2d)[5][5];
}

这些被认为是自动的、全局的还是静态的?

4

2 回答 2

2

所有这些变量都是自动的:全局变量需要在函数范围之外声明;静态变量需要有static修饰符。

确切的大小取决于系统。您可以通过打印sizeof(arr),sizeof(b)等查找。

分配自动变量的确切时间取决于编译器:其中一些是在进入函数时分配的,有些是在进入使用它们的块时分配的,还有一些可能被优化出来,根本没有分配。

于 2012-07-28T03:25:26.900 回答
1

函数内声明的所有局部变量的内存将在运行时分配,然后再执行函数。对于每个函数,将在进程内存的堆栈中创建一个激活记录,其中包含所有局部变量。功能执行完成后,将弹出激活记录。

函数内声明的所有变量都被视为auto仅,除非它被显式声明为staticor register。在函数外部声明的变量将被视为全局变量。

如果一个变量在函数内部或外部声明为静态,则意味着内存分配将在编译时完成,这将在数据段(或 bss)中。

所有指针变量都将存储一些虚拟地址(任何类型或函数的变量)。所以指针变量的大小在 32 位机器的情况下是 4 个字节,在 64 位机器的情况下是 8 个字节。

于 2012-07-29T07:10:15.577 回答