草庐IT

MALLOC_MMAP_THRESHOLD

全部标签

c++ - 如何使用 linux perf 获取 libc6 符号(例如 _int_malloc)的调用父项?

我正在使用linuxperf分析一个C++应用程序,并且我使用GProf2dot得到了一个很好的控制流图.但是,C库(libc6-2.13.so)中的一些符号占用了总时间的很大一部分,但没有边。例如:_int_malloc占用了8%的时间,但没有调用parents。__strcmp_sse42和__cxxabiv1::__si_class_type_info::__do_dyncast一起占用了大约10%的时间,并且调用者的名字是0,它有调用者2d6935c、2cc748c和没有调用者的6。因此,我无法仅使用perf找出哪些例程负责所有这些分配和动态转换。但是,似乎其他符号(例如mal

c++ - 如何使用 linux perf 获取 libc6 符号(例如 _int_malloc)的调用父项?

我正在使用linuxperf分析一个C++应用程序,并且我使用GProf2dot得到了一个很好的控制流图.但是,C库(libc6-2.13.so)中的一些符号占用了总时间的很大一部分,但没有边。例如:_int_malloc占用了8%的时间,但没有调用parents。__strcmp_sse42和__cxxabiv1::__si_class_type_info::__do_dyncast一起占用了大约10%的时间,并且调用者的名字是0,它有调用者2d6935c、2cc748c和没有调用者的6。因此,我无法仅使用perf找出哪些例程负责所有这些分配和动态转换。但是,似乎其他符号(例如mal

c - 是否可以在没有 root 访问权限的情况下在 linux 上使用 packet_mmap?

Linuxhasafeature通过在内核和用户之间映射一个共享缓冲区来允许有效地捕获网络数据包。我正在尝试以不需要root访问权限的方式使用此界面(因为我没有)。packet_mmap通常用于直接查看网络上的所有数据包,这需要root访问权限。我的应用程序只需要使用标准的linuxUDP套接字接口(interface)。我希望纯粹为了效率而使用packet_mmap——现在系统调用占用了我50%以上的CPU周期。有没有办法配置packet_mmap使其可以从用户空间使用? 最佳答案 虽然这并不能真正回答问题(因为它专门针对pack

c - 是否可以在没有 root 访问权限的情况下在 linux 上使用 packet_mmap?

Linuxhasafeature通过在内核和用户之间映射一个共享缓冲区来允许有效地捕获网络数据包。我正在尝试以不需要root访问权限的方式使用此界面(因为我没有)。packet_mmap通常用于直接查看网络上的所有数据包,这需要root访问权限。我的应用程序只需要使用标准的linuxUDP套接字接口(interface)。我希望纯粹为了效率而使用packet_mmap——现在系统调用占用了我50%以上的CPU周期。有没有办法配置packet_mmap使其可以从用户空间使用? 最佳答案 虽然这并不能真正回答问题(因为它专门针对pack

带有 MAP_POPULATE 的 Linux mmap(),手册页似乎提供了错误的信息

在我看来,MAP_POPULATE不仅仅用于私有(private)映射,这与手册页所说的相矛盾:MAP_POPULATE(sinceLinux2.5.46)Populate(prefault)pagetablesforamapping.Forafilemapping,thiscausesread-aheadonthefile.Lateraccessestothemappingwillnotbeblockedbypagefaults.MAP_POPULATEisonlysupportedforprivatemappingssinceLinux2.6.23.基于我对mmap.c的Linux

带有 MAP_POPULATE 的 Linux mmap(),手册页似乎提供了错误的信息

在我看来,MAP_POPULATE不仅仅用于私有(private)映射,这与手册页所说的相矛盾:MAP_POPULATE(sinceLinux2.5.46)Populate(prefault)pagetablesforamapping.Forafilemapping,thiscausesread-aheadonthefile.Lateraccessestothemappingwillnotbeblockedbypagefaults.MAP_POPULATEisonlysupportedforprivatemappingssinceLinux2.6.23.基于我对mmap.c的Linux

c - malloc/calloc返回的内存地址是从虚拟地址空间来的吗?

char*ptr=(char*)malloc(40);printf("%u",ptr);56737856(someoutput)现在,如果我没记错的话,我们在上面看到的输出不是物理地址,而是来自虚拟地址空间。我说得对吗?有什么办法可以看到实际的物理地址吗?反之亦然(如果我上面的假设是错误的),malloc的所有内部实现是否都必须使用jemalloc算法? 最佳答案 您在用户空间应用程序中看到的所有地址都是虚拟地址。物理地址只与内核有关。从虚拟地址到物理地址的映射很复杂,因为:并非所有虚拟地址都有物理地址。(例如,未映射、延迟零填充或

c - malloc/calloc返回的内存地址是从虚拟地址空间来的吗?

char*ptr=(char*)malloc(40);printf("%u",ptr);56737856(someoutput)现在,如果我没记错的话,我们在上面看到的输出不是物理地址,而是来自虚拟地址空间。我说得对吗?有什么办法可以看到实际的物理地址吗?反之亦然(如果我上面的假设是错误的),malloc的所有内部实现是否都必须使用jemalloc算法? 最佳答案 您在用户空间应用程序中看到的所有地址都是虚拟地址。物理地址只与内核有关。从虚拟地址到物理地址的映射很复杂,因为:并非所有虚拟地址都有物理地址。(例如,未映射、延迟零填充或

c - 在 malloc 中,为什么要使用 brk?为什么不直接使用 mmap?

malloc的典型实现使用brk/sbrk作为从操作系统申请内存的主要方式。但是,他们还使用mmap来获取大分配的block。使用brk而不是mmap真的有好处吗,还是只是传统?用mmap做这一切不是同样有效吗?(注意:我在这里互换使用sbrk和brk因为它们是同一个Linux系统调用brk的接口(interface)。)作为引用,这里有一些描述glibcmalloc的文档:GNUC库引用手册:GNU分配器https://www.gnu.org/software/libc/manual/html_node/The-GNU-Allocator.htmlglibcwiki:Malloc概述

c - 在 malloc 中,为什么要使用 brk?为什么不直接使用 mmap?

malloc的典型实现使用brk/sbrk作为从操作系统申请内存的主要方式。但是,他们还使用mmap来获取大分配的block。使用brk而不是mmap真的有好处吗,还是只是传统?用mmap做这一切不是同样有效吗?(注意:我在这里互换使用sbrk和brk因为它们是同一个Linux系统调用brk的接口(interface)。)作为引用,这里有一些描述glibcmalloc的文档:GNUC库引用手册:GNU分配器https://www.gnu.org/software/libc/manual/html_node/The-GNU-Allocator.htmlglibcwiki:Malloc概述