有没有一种便携式的方法在C/C++中实现标记指针,比如一些文档化的宏,可以跨平台和编译器工作?或者当你标记你的指针时,你就处于自己的危险之中了吗?如果这样的辅助函数/宏存在,它们是标准的一部分还是只作为开源库可用?
对于那些不知道什么是标记指针但感兴趣的人,它是一种在普通指针内存储一些额外数据的方法,因为在大多数架构上,指针中的一些位始终为0或1,所以你将你的标志/类型/提示保存在这些额外位中,并在你想要使用指针解引用某个实际值之前将其擦除。
对于那些不知道什么是标记指针但感兴趣的人,它是一种在普通指针内存储一些额外数据的方法,因为在大多数架构上,指针中的一些位始终为0或1,所以你将你的标志/类型/提示保存在这些额外位中,并在你想要使用指针解引用某个实际值之前将其擦除。
const int gc_flag = 1;
const int flag_mask = 7; // aka 0b00000000000111, because on some theoretical CPU under some arbitrary OS compiled with some random compiler and using some particular malloc last three bits are always zero in pointers.
struct value {
void *data;
};
struct value val;
val.data = &data | gc_flag;
int data = *(int*)(val.data & flag_mask);