C++ C++;:&引用;手表;“的用法;新",&引用;删除“;操作员
我想跟踪何时以及有多少内存被分配到我的程序中,并打印出来,以便在某些情况下进行调试C++ C++;:&引用;手表;“的用法;新",&引用;删除“;操作员,c++,memory,new-operator,C++,Memory,New Operator,我想跟踪何时以及有多少内存被分配到我的程序中,并打印出来,以便在某些情况下进行调试 每次使用new在程序中分配内存时,如何打印带有已分配内存量的消息 您可以重载新建和删除运算符。请参阅。如果您使用的是GNU glibc库,则可以使用来执行此操作,如果您希望捕获程序中的所有分配,这将是比重载new/delete更好的方法。如果您只想使用new/delete捕获分配,那么可以重载这些操作符 顺便说一句,如果您试图检测和调试内存问题,而不是滚动您自己的系统,您可能会从使用中受益。调试内存问题的一个很
- 每次使用new在程序中分配内存时,如何打印带有已分配内存量的消息
顺便说一句,如果您试图检测和调试内存问题,而不是滚动您自己的系统,您可能会从使用中受益。调试内存问题的一个很好的方法是使用外部监视器,例如。这将钩住程序的内存分配和释放,并在程序结束时打印一份报告,显示未释放的任何分配。使用此方法无需修改或重新编译程序。如果应用程序非常简单,可以尝试此方法。否则,按照其他人的建议使用valgrind
int sum = 0;
class foo
{
int a,b,c;
};
int main()
{
foo *obj1 = new foo;
sum += sizeof(*obj1); // 12 bytes
foo *obj2 = new foo;
sum += sizeof(*obj2); // 24 bytes
std::cout << " \n Total memory allocated with new:\t " << sum << std::endl ;
return 0;
}
int和=0;
福班
{
INTA、b、c;
};
int main()
{
foo*obj1=新的foo;
sum+=sizeof(*obj1);//12字节
foo*obj2=新的foo;
sum+=sizeof(*obj2);//24字节
std::cout这是有风险的,这取决于第三方库假定如何处理new和delete。如果可以,将重载定位到需要跟踪的类型,而不是全局运算符new/delete。