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