有没有办法区分对象实例使用的内存类型?

use*_*061 3 c++

如果我有这个代码:

#include <assert.h>

class Foo {
public:
    bool is_static();
    bool is_stack();
    bool is_dynamic();
};

Foo a;

int main()
{
    Foo b;
    Foo* c = new Foo;

    assert( a.is_static()  && !a.is_stack()  && !a.is_dynamic());
    assert(!b.is_static()  &&  b.is_stack()  && !b.is_dynamic());
    assert(!c->is_static() && !c->is_stack() &&  c->is_dynamic());

    delete c;
}
Run Code Online (Sandbox Code Playgroud)

是否有可能实现is_stack,is_static,is_dynamic方法,以便做到这一点被断言实现?

使用示例:计算Foo类型的特定对象在堆栈上使用但不计算静态或动态内存的内存大小

Pot*_*ter 6

使用标准C++工具无法做到这一点,无论分配方式如何,都需要确保对象以相同的方式工作.

但是,您可以通过询问操作系统有关您的进程内存映射,以及确定给定对象所属的地址范围来执行此操作.(这样做时一定要用uintptr_t算术.)