看板 C_and_CPP 關於我們 聯絡資訊
這應該是區域跟全域的觀念搞不清楚 glocal.c ------------------ int a; 編譯結果 .file "global.c" .comm a,4,4 .ident "GCC: (Debian 4.6.1-4) 4.6.1" .section .note.GNU-stack,"",@progbits local.c ------------------ void x(){int a;} 編譯結果 .file "local.c" .text .globl x .type x, @function x: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size x, .-x .ident "GCC: (Debian 4.6.1-4) 4.6.1" .section .note.GNU-stack,"",@progbits 用黃色標出來的,就是在組合語言看到把空間要出來的部分 ... 可以看到,區域變數都是用 rsp 搞出來的,每當程式執行到那個 scope,就會去找 rsp 挖洞 ※ 引述《amozartea (單車單車)》之銘言: : 如題,這可能很少人問過 : 書上寫說區域變數其實都自動預設auto, : 在編譯過程中並不會配置一塊記憶體空間,而是在程式執行時以堆疊的方式存放, : 因此他是屬於動態的變數。 : ^^^^^^^^^^^^^^^^^^^^^^ 此段是出自洪維恩的書 : 但是又在動態記憶體章節上面寫說C++都是預設靜態什麼的 很讓人搞混 : ok 總之我目前的認知是一般的陣列是靜態宣告... : (以下都是區域變數) : int a; 跟 auto int a; 等價,而且這是動態 : int a[5]; 是靜態,,,應該吧? : 那假設我宣告如下(當然是區域): : auto int a[5]; 這到底該算靜態還是動態? 已經試過編譯可以過... : 如果是靜態那不是表示auto關鍵字在這裡沒用嗎@@? : 如果是動態的話那跟 : int* a; a = new int[5];又有何不同 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.46 ※ 編輯: meconin 來自: 140.112.30.46 (01/19 18:30) ※ 編輯: meconin 來自: 140.112.30.46 (01/19 18:32)