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