計組 98台大電機

作者: o5739201 (車貸學貸付二貸)   2018-12-12 17:02:13
https://i.imgur.com/s2nI9eU.jpg
怎麼想都感覺怪怪的 為什麼會是用減的 ?
是因為用malloc配置的空間是stack嗎?
作者: eggy1018 (羅密歐與豬過夜)   2018-12-12 18:08:00
Malloc Pointer放在Stack , pointer 指向的data 放在heap如果有錯還請大大指教
作者: alan23273850   2018-12-12 20:35:00
地址由上往下遞增,stack往下長,heap往上長,這樣你就懂了,倒是為什麼 64-bit CPU 的整數是 8 bytes這我還不懂,我以為整數最長就只到 32 bits。
作者: eggy1018 (羅密歐與豬過夜)   2018-12-12 22:25:00
64bit=8byte 因為byte address, 所以是+-8
作者: Dora5566 (咩休幹某)   2018-12-12 22:55:00
蛋大應該是對的
作者: alan23273850   2018-12-12 23:38:00
我剛剛在WSL上印sizeof(int)明明是4,到底為什麼是8是64bit的電腦喔大家要不要把自己sizeof(int)的結果截圖PO上來參考
作者: b0920075 (Void)   2018-12-12 23:44:00
int在32 64下都是4byte啊但是在64下地址所佔空間是8byte,跟int所佔空間根本無關這題應該只是考stack生長方向和 64bit下地址所佔空間而已
作者: o5739201 (車貸學貸付二貸)   2018-12-12 23:53:00
謝謝各位大大 懂了
作者: alan23273850   2018-12-13 00:33:00
我還不懂,https://i.imgur.com/9YkO4kh.jpg明明就是 +8,雖然我承認有被 &p 騙到而且p和q都是區域變數放在stack,stack往下長,地址愈往下愈大,這樣不是本來就是 +8 嗎我在不被 &p 騙到的情況下還是答錯
作者: eggy1018 (羅密歐與豬過夜)   2018-12-13 00:58:00
https://imgur.com/0USdfWfhttps://imgur.com/OF7yZRh抱歉我也不是很理解為什麼你的address會如此,還有待高手回答了
作者: alan23273850   2018-12-13 01:18:00
這題真是太好玩了,那蛋大對+8還是-8有理論解釋嗎?
作者: eggy1018 (羅密歐與豬過夜)   2018-12-13 01:45:00
抱歉我的+-8的意思只是移動8沒特別的意思,造成誤會的話很對不起
作者: DLHZ ( )   2018-12-13 02:00:00
幾byte不是看compiler?
作者: aggress5566 (哩賀)   2018-12-13 03:47:00
sizeof(int)是4byte sizeof(size_t)才會跑出8所以pointer type應該是size_t才是
作者: Dora5566 (咩休幹某)   2018-12-13 07:06:00
是說64bits下存一個int變數花8byte裡面卻只有4byte的資料,是這樣嗎
作者: alan23273850   2018-12-13 08:14:00
DLHZ: 看平台定義常數Dora: 被誤導了,這題問的是指標大小,非普通變數大小,請看清楚,所以我才說這題鑑別度低
作者: Dora5566 (咩休幹某)   2018-12-13 08:36:00
我確實是想問int在64bit時怎麼放的 XDD
作者: alan23273850   2018-12-13 08:39:00
上面有人說過了,sizeof(int) 還是 4
作者: Dora5566 (咩休幹某)   2018-12-13 08:44:00
但64bits不是用8byte對齊嗎啊…我知道了
作者: alan23273850   2018-12-13 09:31:00
剩下就是加減的問題了,這題拿去申複搞不好會送分
作者: o5739201 (車貸學貸付二貸)   2018-12-13 10:12:00
所以是用加的嗎?stack往下長 下面不是位置比較低嗎?我用dev-c去試 是用減的沒錯Compiler 是 TDM-GCC 4.9.2 64bit
作者: aggress5566 (哩賀)   2018-12-13 12:43:00
這個問題就是 如果是4 byte 要怎麼表示 64 bit addr
作者: b0920075 (Void)   2018-12-13 13:30:00
stack是往下長,但local變數擺放順序C語言規格書沒有強制規定,很多compiler會為了安全考量,更改變數擺放位置
作者: alan23273850   2018-12-13 13:32:00
這題根本就有問題,可以把解答全部貼出來嗎
作者: b0920075 (Void)   2018-12-13 13:34:00
喔,還有可能因為空間利用上的關係改變變數順序然後stack地址越往下越小,這os應該有教吧
作者: alan23273850   2018-12-13 14:12:00
可惡,剛查了還真的是愈下面愈小,感謝樓上,受教了這樣的話如果按照預設行為的話答案應該就沒錯了
作者: eggy1018 (羅密歐與豬過夜)   2018-12-13 14:30:00
感謝b大a大的討論 小弟受教了
作者: o5739201 (車貸學貸付二貸)   2018-12-13 17:12:00
答案就只有寫這樣哦 已經是全部了
作者: jjuussttiinn (魯魯醜醜宅)   2018-12-13 18:50:00
https://i.imgur.com/r9Wzkb8.jpg我找到的解答是加的欸
作者: alan23273850   2018-12-14 13:33:00
到底是官方還是非官方的
作者: ss850423tw   2018-12-14 23:33:00
題目是不是只是問 printf(“%x\n”,&p)這行的address和下一行的address的關係,並不是問p q指標的位置關係啊喔喔抱歉 沒看清楚是說那行的 output所以應該是指標存heap然後heap往上長所以是+8沒錯吧
作者: b0920075 (Void)   2018-12-15 09:12:00
&p &q都是stack地址,跟heap無關,如果要看heap地址應該要看p q
作者: ss850423tw   2018-12-15 11:56:00
喔嗚了解了謝謝b大
作者: kobebset105 (小小小妹)   2018-12-15 14:56:00
回覆alan大大 妳的位址第一個是f所以是負數所以這題是減沒有錯喔
作者: alan23273850   2018-12-15 16:58:00
kobe大大按照你說的,那答案位址b開頭代表sign bit=1,那也是負的,這樣選項就錯了對ㄅ包括蛋大的截圖也是,e開頭也是負的,可是他卻是減
作者: aggress5566 (哩賀)   2018-12-15 20:20:00
到底在說什麼 Memory Address 什麼時候有負的這種

Links booklink

Contact Us: admin [ a t ] ucptt.com