【发布时间】:2021-11-18 21:14:42
【问题描述】:
我最近开始在 mac 上使用 clang 和 XCode 12 进行 C++11 开发,我真的很想更好地了解这个平台。
我正在测试在“空”C++ 程序中重载全局 new 和 delete 运算符,但我注意到使用全局替换 new 运算符进行的 89 个分配没有通过全局替换delete 运算符,看起来像内存泄漏。 (也许不是,但为什么呢?)
在调试程序的时候,我发现这些分配都是来自wireless_diagnostics::google::protobuf。
所以我的问题是:
- 什么是 Google protobuf,为什么它会出现在我的程序中?
- 为什么它会留下这些内存泄漏(或似乎是内存泄漏)?
- 有什么办法吗?
代码如下:
#include <iostream>
size_t allocations = 0;
void* operator new(size_t size)
{
void* ptr = malloc(size);
if (!ptr) throw std::bad_alloc{};
allocations++;
return ptr;
}
void operator delete(void* ptr) noexcept
{
free(ptr);
allocations--;
}
int main(int argc, const char * argv[])
{
std::cout << allocations << std::endl;
return 0;
}
【问题讨论】:
标签: c++ memory-management memory-leaks protocol-buffers clang++