c++ - 有没有办法区分对象实例使用的是什么类型的内存?

标签 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;
}

是否可以实现 is_stackis_staticis_dynamic 方法来实现断言?

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

最佳答案

这不能使用标准 C++ 工具来完成,标准 C++ 工具会竭力确保对象以相同的方式工作,无论它们如何分配。

但是,您可以通过向操作系统询问您的进程内存映射,并找出给定对象属于哪个地址范围来做到这一点。 (确保在执行此操作时使用 uintptr_t 进行算术运算。)

关于c++ - 有没有办法区分对象实例使用的是什么类型的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21928898/

相关文章:

c++ - 在堆栈上分配局部变量并使用指针算法

c++ - 如何获取windows "open with .."函数的命令行?

c++ - 'showWindow' : identifier not found with <windows. h> 包含

c++ - unique_ptr 释放会导致内存泄漏吗?

C++ 候选函数不可行?

c++ - 混合 cin 和 getline 输入问题

C++ 预期主表达式在 '<<' Endl 之前

c++ - 在使用 unique_ptr 的函数调用中使用大括号初始化的自动类型推导失败

对文件进行差异化的 C++ 单元测试

c++ - 使用 popen 写入管道仅在管道关闭时发送数据