如果我有这个代码:
#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类型的特定对象在堆栈上使用但不计算静态或动态内存的内存大小
使用标准C++工具无法做到这一点,无论分配方式如何,都需要确保对象以相同的方式工作.
但是,您可以通过询问操作系统有关您的进程内存映射,以及确定给定对象所属的地址范围来执行此操作.(这样做时一定要用uintptr_t算术.)