[問題] 記憶體蠢問題

看板C_and_CPP作者 (好好)時間8年前 (2015/09/20 14:55), 8年前編輯推噓8(8014)
留言22則, 11人參與, 最新討論串1/1
有時候總會想到一些芝麻綠豆的小問題 書上通常也不太會說 雖說不懂不影響大局 但是又不願意這樣打模糊仗 因此就特地來請教版上高手 請問 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

09/20 15:18, , 1F
你舉的例子剛好都是一行ASM就能完成的事
09/20 15:18, 1F

09/20 15:26, , 2F
所有答案的正解應該都是「不一定, 看你的編譯器」
09/20 15:26, 2F

09/20 15:33, , 3F
你的問題在反組譯之後就可以得到答案, 自己試試看
09/20 15:33, 3F

09/20 15:34, , 4F
有這樣的能力才能挖掘底層知識
09/20 15:34, 4F

09/20 15:41, , 5F
我也常常在寫程式時思考人生大事:(
09/20 15:41, 5F

09/20 16:15, , 6F
第一個在龍書有提到,如果編譯器優化開很高,變數c可能
09/20 16:15, 6F

09/20 16:15, , 7F
會用Constant Propagation在Compile time算完
09/20 16:15, 7F

09/20 16:17, , 8F
第二題同理,優化全開可以被Constant floding
09/20 16:17, 8F

09/20 16:18, , 9F
打錯字 folding
09/20 16:18, 9F

09/20 16:21, , 10F
總之自己用GCC試試看,把-o -o2 -o3的都反編過一次就懂
09/20 16:21, 10F
※ 編輯: bald (211.75.12.230), 09/20/2015 21:47:02

09/20 21:48, , 11F
反編?第一次聽到這詞..感謝各位給我方向找尋答案
09/20 21:48, 11F

09/21 01:06, , 12F
看編譯器與上下文,c如果都沒用到可能連編譯都沒編到。
09/21 01:06, 12F

09/21 01:08, , 13F
然後unused warning
09/21 01:08, 13F

09/21 05:11, , 14F
學一些組合語言比較容易弄清楚這些
09/21 05:11, 14F

09/21 09:29, , 15F
會深入思考這個挺不錯的啊
09/21 09:29, 15F

09/21 11:54, , 16F
我看ollydbg看到快脫窗,才能理解程式運作
09/21 11:54, 16F

09/21 21:48, , 17F
不是反編,是反組譯
09/21 21:48, 17F

09/21 22:03, , 18F
第一次看都是這樣,這是苦澀後的甘甜
09/21 22:03, 18F

09/21 22:13, , 19F
我以前剛學的時候完全沒有想這麼多....(面壁)
09/21 22:13, 19F

09/22 01:25, , 20F
想知道執行緒的創建 實作到底是怎麼做的 x86
09/22 01:25, 20F

09/22 07:25, , 21F
樓上能弄一本CS:APP來看
09/22 07:25, 21F

09/22 12:06, , 22F
執行緒可以看understand the linux kernel之類的書XDD
09/22 12:06, 22F
文章代碼(AID): #1L_bXAaE (C_and_CPP)