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
相关问题
- 1. 意义
- 2. 意义
- 3. 意义
- 4. 意义
- 5. 意义
- 6. 意义
- 7. 意义
- 8. 意义
- 9. 意义
- 10. 意义
- 11. 意义
- 12. 意义
- 13. 意义
- 14. 意义
- 15. 意义
- 16. 意义
- 17. 意义
- 18. 意义
- 19. 意义@(#)字符
- 20. 意义的TrackBar
- 21. YAML“=”键意义
- 22. 分组意义
- 23. &的意义joomla
- 24. 概念意义
- 25. AsEnumerable的意义?
- 26. 意义*的
- 27. FLAGS =无意义?
- 28. 完整意义
- 29. 意义全名
- 30. 意义和xmlns =“定义”
对不起,如果我听起来完全noob,但'(void *)-1'如何等于'0xFFFFFFFF' – tomol
@tomol,在[2s补码](https://www.cs。cornell.edu/~tomf/notes/cps104/twoscomp.html) – Matt
@tomol,想想它在另一个方向上,'0xFFFFFFFF + 1'多少钱?它是'0'!...一旦变量因比特限制而溢出,可能会发生有趣的事情;-) – Myst