Tag: 标准合规

这种指针标记方法是否符合C标准?

(回顾指针标记:对象的大小意味着其指针中的有限位数将始终未使用,并且可以重新用于其他用途,例如标记对象的类型。) 对我之前关于这个主题的问题的一个很好的答案证实,将指针转换为整数并将事情转换为整数的天真方法在技术上无法依赖于工作(无视其在实践中的受欢迎程度)。 再考虑一下,我想我有一个适用于原始问题中描述的特定情况的解决方案(所有对象都是相同的大小,所有对象都是从单个“堆”数组中分配的)。 有人可以证实我的推理吗? // given: typedef Cell …; // such that sizeof(Cell) == 8 Cell heap[1024]; // or dynamic, w/e // then: void * tagged = ((char *)&heap[42]) + 3; // pointer with tag 3 (w/e that means) int tag = ((char *)tagged – (char *)heap) % sizeof(Cell); // 3 Cell * ptr = […]