Does variable declaration mean memory allocation?

后端 未结 5 1136
旧时难觅i
旧时难觅i 2020-12-29 07:05

Will it be precise to say that in

void f() {
    int x;
    ...
}

\"int x;\" means allocating sizeof(int) bytes o

5条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-29 07:38

    There are no specification about that and your assumption is often (but not always) false. Consider some code like

    void f() {
       int x;
       for (x=0; x<1000; x++) 
         { // do something with x 
         }
       // x is no more used here
    }
    

    First, an optimizing compiler would put x inside some register of the machine and not consume any stack location (unless e.g. you do something with the address &x like storing it in a global).

    Also the compiler could unroll that loop, and remove x from the generated code. For example, many compilers would replace

    for (x=0; x<5; x++) g(x);
    

    with the equivalent of

    g(0); g(1); g(2); g(3); g(4);
    

    and perhaps replace

    for (x=0; x<10000; x++) t[x]=x;
    

    with something like

    for (α = 0;  α < 10000;  α += 4) 
      { t[α] =  α; t[α+1] =  α+1; t[α+2] =  α+2; t[α+3] =  α+3; };
    

    where α is a fresh variable (or perhaps x itself).

    Also, there might be no stack. For C it is uncommon, but some other languages did not have any stack (see e.g. old A.Appel's book compiling with continuations).

    BTW, if using GCC you could inspect its intermediate (Gimple) representations with e.g. the MELT probe (or using gcc -fdump-tree-all which produces hundreds of dump files!).

提交回复
热议问题