我想问一下:主main函数里的auto变量(一般变量)是在编译时分配地址,还是在程序运行时分配的呢?

解决方案 »

  1.   

    自动变量是不会特意去分配内存的,它存在于堆栈中,用进入main()(包括其它的函数)时相对于当前esp的偏移来表示的,如XXXXXXXX;  pop ebp;
    XXXXXXXX:  mov ebp, esp;
    XXXXXXXX;  sub esp, 44H;这时esp与栈顶间的0x44字节空间就是自动变量存在的区域,其大小是由编译器根据你当前自动变量的多少来确定的,具体自动变量的地址用ebp+xx来表示
      

  2.   

    自动变量所占用的内存空间在栈内,而栈是在程序启动后就分配了的,因而对自动变量,操作系统是不会进行分配内存的操作的,只是在运行时根据当前esp的确定放在哪个地址而已,而该地址所指的内存早已分配了