Q
意義
5
A
回答
5
(void *) -1 == (size_t) -1
這0xFFFFFFFF
32位計算機上和0xFFFFFFFFFFFFFFFF
64位機器上,即應該是比任何其它地址更大的地址無效。
2
(void *) -1
是什麼意思?
它只是一個定點值sbrk()
將不能在一個成功的案例返回的。
- 它指向的確切內存地址是什麼? (如果有的話)
它不是一個有效的地址,具體的值是不相關的。
- 它是如何保證
(void *) -1
不是可以通過sbrk()
上成功返回一個有效的地址?
它也許看起來循環推理,但它保證,因爲sbrk()
保證它作爲合同的一部分。 (例如,sbrk()
可以檢查它是否會返回值,如果成功;如果是這樣,它不是無能爲力,並報告故障)
在實踐中,(void*) -1
上最現代化的機器將是0xFF...FF
,這將是最高可能的地址,這是不太可能有效的。
+1
此外,即使「0xFF..FF」是一個有效的地址,只要系統具有sbrk系統調用,這是內核空間中的一個地址,在用戶模式下不可訪問。技術上'sbrk'可以將內核空間中的任何*地址返回給用戶模式代碼以指示錯誤。 – datenwolf
相關問題
對不起,如果我聽起來完全noob,但'(void *)-1'如何等於'0xFFFFFFFF' – tomol
@tomol,在[2s補碼](https://www.cs。cornell.edu/~tomf/notes/cps104/twoscomp.html) – Matt
@tomol,想想它在另一個方向上,'0xFFFFFFFF + 1'多少錢?它是'0'!...一旦變量因比特限制而溢出,可能會發生有趣的事情;-) – Myst