【发布时间】:2018-04-12 07:48:55
【问题描述】:
好的,我的目标是跟踪已分配的内存。为此,我创建了一个静态变量并重载了 new 和 delete 运算符。不过我有点困惑。当我创建新的 int 对象时,它分配了 4 个字节的内存,但是当我删除指向这个 int 的指针时,它说 8 个字节已被删除。有没有办法准确跟踪它?再往前走,我还想跟踪动态创建的对象并跟踪它使用了多少内存。 这是我的代码:
#include<iostream>
#include<stdlib.h>
static int memory{0};
void* operator new(std::size_t sz){
memory+= sz;
return std::malloc(sz);
}
void operator delete(void* ptr) noexcept{
memory-= sizeof(ptr);
std::free(ptr);
}
int main()
{
int * p = new int;
*p = 2;
std::cout << memory; // memory = 4
delete p;
std::cout << memory; // memory = -4
}
【问题讨论】:
-
这可能是一个竞争条件。对内存的原子变量尝试相同的操作。
-
sizeof(ptr) 不是您分配的数量,而是指针的大小(x64 上为 8 个字节)
-
@davidhigh:只有一个线程。
-
您可以分配更多以节省返回指针附近的大小。小心对齐。
-
尝试重载 (5) in: en.cppreference.com/w/cpp/memory/new/operator_delete
标签: c++