Hirdetés

Új hozzászólás Aktív témák

  • Ahogy a kollega írta, logikailag megsemmisül és a szabvány csak ennyit ír elő.
    Az már fordítófüggő, hogy ez hogyan néz ki gépi kód szinten, de rendesen optimalizáló fordító nyilván előre lefoglalja a területet és újrahasznosítja. Mellesleg a stack kezelésnek igen minimális az overheadje hiszen csak egy-egy pointer művelet.

    Ha érdekel a végeredmény hogy néz ki akkor kérj assembly listát a fordítódtól vagy használd ezt a remek weboldalt.

    Huh, nagyon jó ez a GCC Explorer, meg is adta a választ:

    int main() {
    for (int i = 0; i < 5; ++i) {
    int x = i + 10;
    }
    }

    g++ 4.8 (-O és más kapcsolók nélkül)

    main:
    push rbp
    mov rbp, rsp
    mov DWORD PTR [rbp-8], 0
    jmp .L2
    .L3:
    mov eax, DWORD PTR [rbp-8]
    add eax, 10
    mov DWORD PTR [rbp-4], eax
    add DWORD PTR [rbp-8], 1
    .L2:
    cmp DWORD PTR [rbp-8], 4
    jle .L3
    mov eax, 0
    pop rbp
    ret

    Érdekes, ha jól olvasom, akkor a teljes stack allokálás (int i és int x is) megtörténik már a ciklus előtt, azaz nincs sem menet közbeni allokálás, sem blokk utáni deallokálás.

Új hozzászólás Aktív témák