Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:&引用;手表;“的用法;新",&引用;删除“;操作员_C++_Memory_New Operator - Fatal编程技术网

C++ C++;:&引用;手表;“的用法;新",&引用;删除“;操作员

C++ C++;:&引用;手表;“的用法;新",&引用;删除“;操作员,c++,memory,new-operator,C++,Memory,New Operator,我想跟踪何时以及有多少内存被分配到我的程序中,并打印出来,以便在某些情况下进行调试 每次使用new在程序中分配内存时,如何打印带有已分配内存量的消息 您可以重载新建和删除运算符。请参阅。如果您使用的是GNU glibc库,则可以使用来执行此操作,如果您希望捕获程序中的所有分配,这将是比重载new/delete更好的方法。如果您只想使用new/delete捕获分配,那么可以重载这些操作符 顺便说一句,如果您试图检测和调试内存问题,而不是滚动您自己的系统,您可能会从使用中受益。调试内存问题的一个很

我想跟踪何时以及有多少内存被分配到我的程序中,并打印出来,以便在某些情况下进行调试

  • 每次使用new在程序中分配内存时,如何打印带有已分配内存量的消息

您可以重载新建和删除运算符。请参阅。

如果您使用的是GNU glibc库,则可以使用来执行此操作,如果您希望捕获程序中的所有分配,这将是比重载new/delete更好的方法。如果您只想使用new/delete捕获分配,那么可以重载这些操作符


顺便说一句,如果您试图检测和调试内存问题,而不是滚动您自己的系统,您可能会从使用中受益。

调试内存问题的一个很好的方法是使用外部监视器,例如。这将钩住程序的内存分配和释放,并在程序结束时打印一份报告,显示未释放的任何分配。使用此方法无需修改或重新编译程序。

如果应用程序非常简单,可以尝试此方法。否则,按照其他人的建议使用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。