大佬教程收集整理的这篇文章主要介绍了这种C标准的标记方法是否符合标准?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
excellent answer到我的previous question在这个问题上证实,将指针转换为整数和对整数进行处理的天真的方法在技术上不能依赖于工作(不考虑其在实践中的流行度).
再考虑一下,我想我有一个解决方案适用于原始问题中描述的具体情况(所有对象的大小相同,所有对象都从单个“堆”数组分配).有人可以确认我的推理吗
// 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 = (Cell *)((char *)tagged - tag); // &heap[42]
换句话说:没有关于指针的整数表示的假设.通过索引指向对象中的字节来应用标记. (这肯定是允许的.)
指针减法返回相同数组中两个对象的索引的差异.对象内的字节地址应该是连续的,因此通过获取寻址字节的索引并从该索引中删除所有以前的所有单元格的大小,将标记的值转换为标签;标记的指针可以通过删除现在已知的索引偏移量来还原到单元格指针.
这是否符合标准,因此是一种便携式的指针标记方法?如果在这种情况下将数组的类型转换为其他字符,则指针减法是否仍然可以工作?我可以这样使用sizeof(Cell)吗?
(不,我不知道为什么这个技术性在我心中好多了,是的,可移植性很容易通过其他方式实现.)
以上是大佬教程为你收集整理的这种C标准的标记方法是否符合标准?全部内容,希望文章能够帮你解决这种C标准的标记方法是否符合标准?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。