Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.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++ 是否有任何方法可以查看每个线程的进程的虚拟内存usgae?_C++_C_Linux_Multithreading_Memory - Fatal编程技术网

C++ 是否有任何方法可以查看每个线程的进程的虚拟内存usgae?

C++ 是否有任何方法可以查看每个线程的进程的虚拟内存usgae?,c++,c,linux,multithreading,memory,C++,C,Linux,Multithreading,Memory,我使用的是RHEL 6.3(64位)。 我在我的多线程c/c++程序中做了一些更改(针对特定需求使用std:map),现在我的项目的初始虚拟内存使用率已经非常高(大约900m)。我所做的所有更改都由宏保护 但是在禁用宏之后,我也看不到进程的虚拟内存使用有任何减少 所以我有几个问题要问 有没有办法找出哪个线程占用了最大的虚拟内存,这样我就可以隔离问题了 为什么禁用宏后,进程的虚拟内存使用率没有下降 32位(RHEL-6.3)上的相同项目占用的虚拟内存更少(约为-150m)。 几乎是64位操作系统的

我使用的是RHEL 6.3(64位)。 我在我的多线程c/c++程序中做了一些更改(针对特定需求使用std:map),现在我的项目的初始虚拟内存使用率已经非常高(大约900m)。我所做的所有更改都由宏保护

但是在禁用宏之后,我也看不到进程的虚拟内存使用有任何减少

所以我有几个问题要问

  • 有没有办法找出哪个线程占用了最大的虚拟内存,这样我就可以隔离问题了

  • 为什么禁用宏后,进程的虚拟内存使用率没有下降

  • 32位(RHEL-6.3)上的相同项目占用的虚拟内存更少(约为-150m)。 几乎是64位操作系统的6倍。为什么?

    我使用top命令查看虚拟内存的使用情况

  • 你可能应该用它来打猎。当然,用调试信息和警告编译所有程序(例如
    g++-Wall-g
    )。使用x86-64上的最新编译器(例如),您还可以使用地址消毒器(
    -fsanize=address

    在运行(用于测试)程序时,可以使用来查询其地址空间。另见。也试试看。在64位系统上对原始程序进行基准测试(无需任何修改)

    我希望你在你的代码和你的修改中使用了一个like

    根据定义,在您的应用程序中,所有线程都通用。认为某个特定线程正在消耗内存是错误的——它是进程本身(即运行程序中的任何线程)

    也许您想编译

    顺便说一句,每个线程都需要一些内存(用于堆栈、TLS等…)-其他线程当然可以看到这些内存,例如,如果您在其中传递一些指针,那么64位上的内存可能比32位上的内存更多。你有多少线?(您可能应该避免拥有十几条线程)。

    您可能应该使用这些线程进行搜索。当然,用调试信息和警告编译所有程序(例如
    g++-Wall-g
    )。使用x86-64上的最新编译器(例如),您还可以使用地址消毒器(
    -fsanize=address

    在运行(用于测试)程序时,可以使用来查询其地址空间。另见。也试试看。在64位系统上对原始程序进行基准测试(无需任何修改)

    我希望你在你的代码和你的修改中使用了一个like

    根据定义,在您的应用程序中,所有线程都通用。认为某个特定线程正在消耗内存是错误的——它是进程本身(即运行程序中的任何线程)

    也许您想编译

    顺便说一句,每个线程都需要一些内存(用于堆栈、TLS等…)-其他线程当然可以看到这些内存,例如,如果您在其中传递一些指针,那么64位上的内存可能比32位上的内存更多。你有多少线?(您可能应该避免拥有十几条线程)。

    您可能应该使用这些线程进行搜索。当然,用调试信息和警告编译所有程序(例如
    g++-Wall-g
    )。使用x86-64上的最新编译器(例如),您还可以使用地址消毒器(
    -fsanize=address

    在运行(用于测试)程序时,可以使用来查询其地址空间。另见。也试试看。在64位系统上对原始程序进行基准测试(无需任何修改)

    我希望你在你的代码和你的修改中使用了一个like

    根据定义,在您的应用程序中,所有线程都通用。认为某个特定线程正在消耗内存是错误的——它是进程本身(即运行程序中的任何线程)

    也许您想编译

    顺便说一句,每个线程都需要一些内存(用于堆栈、TLS等…)-其他线程当然可以看到这些内存,例如,如果您在其中传递一些指针,那么64位上的内存可能比32位上的内存更多。你有多少线?(您可能应该避免拥有十几条线程)。

    您可能应该使用这些线程进行搜索。当然,用调试信息和警告编译所有程序(例如
    g++-Wall-g
    )。使用x86-64上的最新编译器(例如),您还可以使用地址消毒器(
    -fsanize=address

    在运行(用于测试)程序时,可以使用来查询其地址空间。另见。也试试看。在64位系统上对原始程序进行基准测试(无需任何修改)

    我希望你在你的代码和你的修改中使用了一个like

    根据定义,在您的应用程序中,所有线程都通用。认为某个特定线程正在消耗内存是错误的——它是进程本身(即运行程序中的任何线程)

    也许您想编译


    顺便说一句,每个线程都需要一些内存(用于堆栈、TLS等…)-其他线程当然可以看到这些内存,例如,如果您在其中传递一些指针,那么64位上的内存可能比32位上的内存更多。你有多少线?(您可能应该避免有十几个线程)。

    您可以为您的进程尝试ps命令grep并列出线程 ps-eLF,我记不起按内存使用情况进行排序


    请尝试top--command“H”选项以显示线程

    您可以尝试为进程使用ps command grep并列出线程 ps-eLF,我记不起按内存使用情况进行排序


    请尝试top--command“H”选项以显示线程

    您可以尝试为进程使用ps command grep并列出线程 ps-eLF,我记不起按内存使用情况进行排序


    请尝试top--command“H”选项以显示线程

    您可以尝试为进程使用ps command grep并列出线程 ps-eLF,我记不起按内存使用情况进行排序

    尝试top--命令“H”选项
    extern void * operator new( size_t, const char *, int );
    
    #if 1
    #define MY_NEW() new
    #else
    #define MY_NEW() new( __FILE__, __LINE__ )
    #endif