看板 C_and_CPP 關於我們 聯絡資訊
有時候總會想到一些芝麻綠豆的小問題 書上通常也不太會說 雖說不懂不影響大局 但是又不願意這樣打模糊仗 因此就特地來請教版上高手 請問 1) int a = 1; int b = 2; int c; c = a + b; 請問 a + b 作完後 電腦會分配一個 暫存記憶體給 3 然後再存入 c 或者是 3直接存給c 呢? 2) c = a + 1 + 2 + 3; 電腦會一次先分配記憶體儲存1,2,3? 或者是 只有一個記憶體 逐次儲存 1 2 3? thx -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.180.31 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1442732106.A.90E.html
bibo9901: 你舉的例子剛好都是一行ASM就能完成的事 09/20 15:18
uranusjr: 所有答案的正解應該都是「不一定, 看你的編譯器」 09/20 15:26
descent: 你的問題在反組譯之後就可以得到答案, 自己試試看 09/20 15:33
descent: 有這樣的能力才能挖掘底層知識 09/20 15:34
stupid0319: 我也常常在寫程式時思考人生大事:( 09/20 15:41
ronin728: 第一個在龍書有提到,如果編譯器優化開很高,變數c可能 09/20 16:15
ronin728: 會用Constant Propagation在Compile time算完 09/20 16:15
ronin728: 第二題同理,優化全開可以被Constant floding 09/20 16:17
ronin728: 打錯字 folding 09/20 16:18
ronin728: 總之自己用GCC試試看,把-o -o2 -o3的都反編過一次就懂 09/20 16:21
※ 編輯: bald (211.75.12.230), 09/20/2015 21:47:02
bald: 反編?第一次聽到這詞..感謝各位給我方向找尋答案 09/20 21:48
okgogogo: 看編譯器與上下文,c如果都沒用到可能連編譯都沒編到。 09/21 01:06
okgogogo: 然後unused warning 09/21 01:08
grayStone: 學一些組合語言比較容易弄清楚這些 09/21 05:11
james732: 會深入思考這個挺不錯的啊 09/21 09:29
stupid0319: 我看ollydbg看到快脫窗,才能理解程式運作 09/21 11:54
Bencrie: 不是反編,是反組譯 09/21 21:48
descent: 第一次看都是這樣,這是苦澀後的甘甜 09/21 22:03
james732: 我以前剛學的時候完全沒有想這麼多....(面壁) 09/21 22:13
dsin: 想知道執行緒的創建 實作到底是怎麼做的 x86 09/22 01:25
ronin728: 樓上能弄一本CS:APP來看 09/22 07:25
james732: 執行緒可以看understand the linux kernel之類的書XDD 09/22 12:06