如果我有这段代码:
#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;
}
是否可以实现 is_stack
、is_static
、is_dynamic
方法来实现断言?
使用示例:计算 Foo 类型的特定对象在堆栈上使用的内存大小,但不计算静态或动态内存
最佳答案
这不能使用标准 C++ 工具来完成,标准 C++ 工具会竭力确保对象以相同的方式工作,无论它们如何分配。
但是,您可以通过向操作系统询问您的进程内存映射,并找出给定对象属于哪个地址范围来做到这一点。 (确保在执行此操作时使用 uintptr_t
进行算术运算。)
关于c++ - 有没有办法区分对象实例使用的是什么类型的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21928898/