在Linux手册页对于sbrk()
该发生故障时,它返回的状态(void*) -1
。什么是(void*) -1
,它是否有任何意义,或者它只是一个永远不可能真正成为 a 的数字,void*
它被强制转换为 avoid*
只是为了满足返回 a 的函数签名void*
?我问这个是因为我以前从未见过指向负地址的指针。我不知道这可以在任何平台上取消引用。
在大多数操作系统中,内存分配在一组页面中(这些页面可以在物理 RAM 中,也可以是存储在永久存储磁盘/设备上的虚拟页面,每个页面通常为 4KB)。由于 -1(无符号 0xFFFFFFFFFFFFFFFF 或 32 位的 0xFFFFFFFF)是 QWORD(或 32 位的 DWORD)的最大可能值,因此页面通常不能从此地址开始,因为它是地址空间中的最后一个地址。因此 -1 是一个很好的值,用于指示内存分配中的错误,因为它通常被认为是一个不存在的页面。至于指向负地址的指针,如果您曾经有过汇编经验,您的编译器负责在其代码生成中强制执行符号,您会记得变量不隐式具有符号(只有指令赋予它此属性)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句