问题描述
我有 2 个指向 C++ 节点的指针:
MallocMetadata *first_node,MallocMetadata *second_node
如何检查 first_node 是否在 second_node 之前首先出现在内存中(在堆中和第一个我的意思是低地址)。
我试过了:
assert(first_node%8 ==0);
但是,不编译,我得到:
二进制表达式的无效操作数('MallocMetadata *' 和 'int')
解决方法
您可以使用 reinterpret_cast 将您的指针转换为 std::intptr_t
或 std::uintptr_t
,然后使用它做任何您想做的事情,例如:
if(first_node_intptr < second_node_intptr) {...}
// or
if(first_node_intptr % 8 == 0) {...}
但你应该记住:
如果类型 std::intptr_t 和 std::uintptr_t 存在,它们保证足够长以容纳一个 void* (因此任何指向对象类型的指针)。但是,它们不能保证足够长以保存函数指针。
Conversion between pointer and integer
您还应该意识到这种方法的缺点,@PeteBecker 在下面指出了这一点。