是否可以仅通过将分配的指针地址存储在C++中来分析内存?
Is it possible to profile memory only by storing allocated pointer address in C++?
我想创建一个简单的内存分析器。它将存储由运算符返回的地址new
(或直接从malloc()
( 与分配的大小相关联 - 作为某个数据库中的事件。然后我想仅使用传递给运算符delete
(或free()
(的地址来跟踪释放。
是真的吗,在C++我可以确定传递给运算符的指针delete
(或free()
(始终是先前分配的指针?
我怀疑分配器内部是否有一些隐藏C++指针算法,它允许删除向上或向下转换的指针而不是原始指针。
这是真的吗,在C++中我可以确定传递给运算符 delete(或 free(((的指针总是之前分配的指针?
是的,这是真的。它也可以是空指针,在这种情况下,您的函数不应执行任何操作。
此函数的标准库实现的行为是未定义的,除非 ptr 是空指针或以前从
operator new
...
由于大多数代码是为operator new
/delete
的标准库实现而编写的,因此它不会传递指向operator delete
的其他指针。
有人可能会编写一个具有重载operator new
的类,并且operator delete
没有此要求。在这种情况下,它也不会调用您的自定义分配器。
我怀疑分配器内部是否有一些隐藏C++指针算术,它允许删除向上或向下转换的指针而不是原始指针。
分配/解除分配的内存仍然相同,区别在于在释放之前调用哪个析构函数。
在调试级别,您具有相同的指针。一个简单的内存分析器可以通过重载运算符new/delete来实现。您可以拥有一个存储指针的地图,并检查以前未使用新运算符存储的内容是否被传递到删除。
此外,还有您可能想要分析的C++级别之外的内存分配。在Windows,VirtualAlloc,COM内存,句柄等中。
- 将字符串存储在c++中的稳定内存中
- std::原子加载和存储都需要吗
- C++:将控制台输出存储在宏中更好吗
- 使用QProcess执行命令,并将结果存储在QStringList中
- 访问存储在向量C++中的结构的多态成员
- 如何从存储在std::映射中的std::集中删除元素
- 存储模板类型以强制转换回派生<T>
- 类型总是使用其大小存储在内存中吗
- 当字符串存储在变量中时,如何将字符串转换为wchar_t
- 使用无符号字符数组有效存储内存
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 带结构的二维矢量:如何存储元素
- 添加存储在向量中的大整数的函数出现问题
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 在std::vector上存储带有模板的类实例
- 谷歌测试中的期望值存储在哪里
- 为什么C中的通用链表中存储的数据已损坏
- 在c++中获取两个大int,并将它们存储在数组中
- 在reactor中存储eventHandlers的最佳方式是什么