計組 98台大電機

看板Grad-ProbAsk作者 (車貸學貸付二貸)時間7年前 (2018/12/12 17:02), 編輯推噓29(30141)
留言72則, 10人參與, 7年前最新討論串1/1
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

12/12 18:08, 7年前 , 1F
Malloc Pointer放在Stack , pointer 指向的data 放在hea
12/12 18:08, 1F

12/12 18:08, 7年前 , 2F
p
12/12 18:08, 2F

12/12 18:08, 7年前 , 3F
如果有錯還請大大指教
12/12 18:08, 3F

12/12 20:35, 7年前 , 4F
地址由上往下遞增,stack往下長,heap往上長,這樣
12/12 20:35, 4F

12/12 20:35, 7年前 , 5F
你就懂了,倒是為什麼 64-bit CPU 的整數是 8 bytes
12/12 20:35, 5F

12/12 20:36, 7年前 , 6F
這我還不懂,我以為整數最長就只到 32 bits。
12/12 20:36, 6F

12/12 22:25, 7年前 , 7F
64bit=8byte 因為byte address, 所以是+-8
12/12 22:25, 7F

12/12 22:55, 7年前 , 8F
蛋大應該是對的
12/12 22:55, 8F

12/12 23:38, 7年前 , 9F
我剛剛在WSL上印sizeof(int)明明是4,到底為什麼是8
12/12 23:38, 9F

12/12 23:39, 7年前 , 10F
是64bit的電腦喔
12/12 23:39, 10F

12/12 23:41, 7年前 , 11F
大家要不要把自己sizeof(int)的結果截圖PO上來參考
12/12 23:41, 11F

12/12 23:44, 7年前 , 12F
int在32 64下都是4byte啊
12/12 23:44, 12F

12/12 23:45, 7年前 , 13F
但是在64下地址所佔空間是8byte,跟int所佔空間根本無
12/12 23:45, 13F

12/12 23:45, 7年前 , 14F
12/12 23:45, 14F

12/12 23:49, 7年前 , 15F
這題應該只是考stack生長方向和 64bit下地址所佔空間而
12/12 23:49, 15F

12/12 23:49, 7年前 , 16F
12/12 23:49, 16F

12/12 23:53, 7年前 , 17F
謝謝各位大大 懂了
12/12 23:53, 17F

12/13 00:33, 7年前 , 18F
12/13 00:33, 18F

12/13 00:34, 7年前 , 19F
明明就是 +8,雖然我承認有被 &p 騙到
12/13 00:34, 19F

12/13 00:36, 7年前 , 20F
而且p和q都是區域變數放在stack,stack往下長,地址
12/13 00:36, 20F

12/13 00:36, 7年前 , 21F
愈往下愈大,這樣不是本來就是 +8 嗎
12/13 00:36, 21F

12/13 00:37, 7年前 , 22F
我在不被 &p 騙到的情況下還是答錯
12/13 00:37, 22F

12/13 00:58, 7年前 , 23F

12/13 00:58, 7年前 , 24F

12/13 00:59, 7年前 , 25F
抱歉我也不是很理解為什麼你的address會如此,還有待高
12/13 00:59, 25F

12/13 01:00, 7年前 , 26F
手回答了
12/13 01:00, 26F

12/13 01:18, 7年前 , 27F
這題真是太好玩了,那蛋大對+8還是-8有理論解釋嗎?
12/13 01:18, 27F

12/13 01:45, 7年前 , 28F
抱歉我的+-8的意思只是移動8沒特別的意思,造成誤會的
12/13 01:45, 28F

12/13 01:45, 7年前 , 29F
話很對不起
12/13 01:45, 29F

12/13 02:00, 7年前 , 30F
幾byte不是看compiler?
12/13 02:00, 30F

12/13 03:47, 7年前 , 31F
sizeof(int)是4byte sizeof(size_t)才會跑出8
12/13 03:47, 31F

12/13 04:01, 7年前 , 32F
所以pointer type應該是size_t才是
12/13 04:01, 32F

12/13 07:06, 7年前 , 33F
是說64bits下存一個int變數花8byte裡面卻只有4byte的資
12/13 07:06, 33F

12/13 07:06, 7年前 , 34F
料,是這樣嗎
12/13 07:06, 34F

12/13 08:14, 7年前 , 35F
DLHZ: 看平台定義常數
12/13 08:14, 35F

12/13 08:16, 7年前 , 36F
Dora: 被誤導了,這題問的是指標大小,非普通變數
12/13 08:16, 36F

12/13 08:16, 7年前 , 37F
大小,請看清楚,所以我才說這題鑑別度低
12/13 08:16, 37F

12/13 08:36, 7年前 , 38F
我確實是想問int在64bit時怎麼放的 XDD
12/13 08:36, 38F

12/13 08:39, 7年前 , 39F
上面有人說過了,sizeof(int) 還是 4
12/13 08:39, 39F

12/13 08:44, 7年前 , 40F
但64bits不是用8byte對齊嗎
12/13 08:44, 40F

12/13 08:50, 7年前 , 41F
啊…我知道了
12/13 08:50, 41F

12/13 09:31, 7年前 , 42F
剩下就是加減的問題了,這題拿去申複搞不好會送分
12/13 09:31, 42F

12/13 10:12, 7年前 , 43F
所以是用加的嗎?stack往下長 下面不是位置比較低嗎?
12/13 10:12, 43F

12/13 10:23, 7年前 , 44F
我用dev-c去試 是用減的沒錯
12/13 10:23, 44F

12/13 10:23, 7年前 , 45F
Compiler 是 TDM-GCC 4.9.2 64bit
12/13 10:23, 45F

12/13 12:43, 7年前 , 46F
這個問題就是 如果是4 byte 要怎麼表示 64 bit addr
12/13 12:43, 46F

12/13 13:30, 7年前 , 47F
stack是往下長,但local變數擺放順序C語言規格書沒有強
12/13 13:30, 47F

12/13 13:32, 7年前 , 48F
制規定,很多compiler會為了安全考量,更改變數擺放位置
12/13 13:32, 48F

12/13 13:32, 7年前 , 49F
這題根本就有問題,可以把解答全部貼出來嗎
12/13 13:32, 49F

12/13 13:34, 7年前 , 50F
喔,還有可能因為空間利用上的關係改變變數順序
12/13 13:34, 50F

12/13 13:46, 7年前 , 51F
然後stack地址越往下越小,這os應該有教吧
12/13 13:46, 51F

12/13 14:12, 7年前 , 52F
可惡,剛查了還真的是愈下面愈小,感謝樓上,受教了
12/13 14:12, 52F

12/13 14:13, 7年前 , 53F
這樣的話如果按照預設行為的話答案應該就沒錯了
12/13 14:13, 53F

12/13 14:30, 7年前 , 54F
感謝b大a大的討論 小弟受教了
12/13 14:30, 54F

12/13 17:12, 7年前 , 55F
答案就只有寫這樣哦 已經是全部了
12/13 17:12, 55F

12/13 18:50, 7年前 , 56F

12/13 18:51, 7年前 , 57F
我找到的解答是加的欸
12/13 18:51, 57F

12/14 13:33, 7年前 , 58F
到底是官方還是非官方的
12/14 13:33, 58F

12/14 23:33, 7年前 , 59F
題目是不是只是問 printf(“%x\n”,&p)這行的addre
12/14 23:33, 59F

12/14 23:33, 7年前 , 60F
ss和下一行的address的關係,並不是問p q指標的位置
12/14 23:33, 60F

12/14 23:33, 7年前 , 61F
關係啊
12/14 23:33, 61F

12/14 23:42, 7年前 , 62F
喔喔抱歉 沒看清楚是說那行的 output所以應該是指標
12/14 23:42, 62F

12/14 23:42, 7年前 , 63F
存heap然後heap往上長所以是+8沒錯吧
12/14 23:42, 63F

12/15 09:12, 7年前 , 64F
&p &q都是stack地址,跟heap無關,如果要看heap地址應
12/15 09:12, 64F

12/15 09:12, 7年前 , 65F
該要看p q
12/15 09:12, 65F

12/15 11:56, 7年前 , 66F
喔嗚了解了謝謝b大
12/15 11:56, 66F

12/15 14:56, 7年前 , 67F
回覆alan大大 妳的位址第一個是f所以是負數
12/15 14:56, 67F

12/15 14:57, 7年前 , 68F
所以這題是減沒有錯喔
12/15 14:57, 68F

12/15 16:58, 7年前 , 69F
kobe大大按照你說的,那答案位址b開頭代表sign bit=
12/15 16:58, 69F

12/15 16:58, 7年前 , 70F
1,那也是負的,這樣選項就錯了對ㄅ
12/15 16:58, 70F

12/15 16:59, 7年前 , 71F
包括蛋大的截圖也是,e開頭也是負的,可是他卻是減
12/15 16:59, 71F

12/15 20:20, 7年前 , 72F
到底在說什麼 Memory Address 什麼時候有負的這種
12/15 20:20, 72F
文章代碼(AID): #1S4CwNa4 (Grad-ProbAsk)