C++,检查实例是否在内存中出现在另一个之前?

C++, Check if Instance comes before Another in memory?

我有 2 个指向 C++ 节点的指针:

MallocMetadata *first_node, MallocMetadata *second_node

我如何检查 first_node 是否在 second_node 之前在内存中排在第一位(在堆中和首先我指的是较低地址)。

  1. 是否正确使用:if(first_node < second_node) ?

  2. 假设我想检查 first_node 在内存中的位置是否是 8 的乘积如何做到这一点:

我试过了:

assert(first_node%8 ==0);

但是,没有编译,我得到:

Invalid operands to binary expression ('MallocMetadata *' and 'int')

您可以使用 reinterpret_cast 将您的指针转换为 std::intptr_tstd::uintptr_t,然后用它做任何您想做的事情,因为示例:

if(first_node_intptr < second_node_intptr) {...}
// or
if(first_node_intptr % 8 == 0) {...}

但你应该记住:

If the types std::intptr_t and std::uintptr_t exist, they are guaranteed to be long enough to hold a void* (and hence any pointer to object type). However, they are not guaranteed to be long enough to hold a function pointer.

Conversion between pointer and integer

您还应该意识到这种方法的缺点,@PeteBecker 在下面指出了这一点。