标签: tcmalloc

malloc实现是否会将free-ed内存返回给系统?

我有一个长期存在的应用程序,频繁的内存分配 - 释放.任何malloc实现都会将释放的内存返回给系统吗?

在这方面,什么是以下行为:

  • ptmalloc 1,2(默认为glibc)或3
  • dlmalloc
  • tcmalloc(谷歌线程malloc)
  • solaris 10-11默认malloc和mtmalloc
  • FreeBSD 8默认malloc(jemalloc)
  • Hoard malloc?

更新

如果我有一个应用程序,其白天和夜晚的内存消耗可能非常不同(例如),我可以强制任何malloc将系统释放的内存吗?

如果没有这样的返回,释放的内存将被多次换出,但这样的内存只包含垃圾.

malloc free mmap glibc tcmalloc

54
推荐指数
4
解决办法
2万
查看次数

tcmalloc/jemalloc和内存池之间的区别是什么

tcmalloc/jemalloc是改进的内存分配器,并且还引入了内存池以实现更好的内存分配.那么它们之间有什么区别以及如何在我的应用程序中选择它们呢?

c linux memory malloc tcmalloc

52
推荐指数
3
解决办法
3万
查看次数

C++内存分配机制性能比较(tcmalloc vs. jemalloc)

我有一个分配大量内存的应用程序,我正在考虑使用比malloc更好的内存分配机制.

我的主要选择是:jemalloc和tcmalloc.使用它们中的任何一个是否有任何好处?

http://locklessinc.com/benchmarks.shtml中 ,一些机制(包括作者的专有机制 - 无锁)之间有一个很好的比较,它提到了每个机制的优点和缺点.

鉴于这两种机制都是积极的并且不断改进.有没有人对这两者的相对表现有任何见解或经验?

c++ linux malloc tcmalloc

24
推荐指数
3
解决办法
2万
查看次数

如何使用TCMalloc?

首先,我想知道如何TCmalloc在Ubuntu中安装.然后我需要一个程序使用TCmalloc.然后我需要一个小程序来表明它TCmalloc比工作更好PTmalloc.

tcmalloc

11
推荐指数
4
解决办法
2万
查看次数

是否存在不在其分配中存储元数据的自定义内存分配器设计模式?

基本上,我需要一个内存池来快速分配小对象.理想情况下,我想替换主机上的分配,以及使用cudaMalloc在GPU上分配的内存.我可以写自己的,如果必须,我会,但我不介意交换一个可靠的开源实现.

唯一的问题是,使用cudaMalloc,内存池无法触及分配的内存.我的理解是,许多(所有?)公共内存分配器(如标题中的那些)在分配的数据中存储少量元数据.因此它们不起作用.

有没有人知道一个内存分配器,但事实并非如此?

c++ memory-management cuda tcmalloc memory-pool

9
推荐指数
1
解决办法
1014
查看次数

tcmalloc:如何在静态编译时覆盖我的malloc调用?

当我使用时LD_PRELOAD=/usr/local/lib/libtcmalloc.so,我对malloc的所有调用都变成了tcmalloc调用.但是,当我静静地链接到libtcmalloc时,我发现直接malloc被调用,除非我仍然使用该LD_PRELOAD设置.

那么我怎么能以这样的方式静态编译tcmalloc,使我的mallocs挂钩到tcmalloc?

笔记:

  • 我正在使用大量的C++ new等,所以只有#defining malloc to tcmalloc才行
  • 可能我必须自己使用malloc_hook,但我想我可以得到tcmalloc来为我做,因为它显然在动态链接时这样做

c++ malloc linker tcmalloc

8
推荐指数
1
解决办法
6670
查看次数

与libtcmalloc ubuntu链接

我安装了包libtcmalloc-minimal0

但是当我尝试使用flag编译我的程序时

-ltcmalloc-minimal0

我收到了错误

/ usr/bin/ld:找不到-ltcmalloc_minimal0

我检查了/ usr/lib,库就在那里

更多信息

dpkg给出以下o/p

dpkg -L libtcmalloc-minimal0
/.
/usr
/usr/lib
/usr/lib/libtcmalloc_minimal.so.0.0.0
/usr/lib/libtcmalloc_minimal_debug.so.0.0.0
/usr/share
/usr/share/doc
/usr/share/doc/libtcmalloc-minimal0
/usr/share/doc/libtcmalloc-minimal0/TODO
/usr/share/doc/libtcmalloc-minimal0/AUTHORS
/usr/share/doc/libtcmalloc-minimal0/copyright
/usr/share/doc/libtcmalloc-minimal0/changelog.gz
/usr/share/doc/libtcmalloc-minimal0/README.gz
/usr/share/doc/libtcmalloc-minimal0/changelog.Debian.gz
/usr/lib/libtcmalloc_minimal.so.0
/usr/lib/libtcmalloc_minimal_debug.so.0
Run Code Online (Sandbox Code Playgroud)

我正在编译64位模式

和库也是64位

file  /usr/lib/libtcmalloc_minimal.so.0.0.0
/usr/lib/libtcmalloc_minimal.so.0.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
Run Code Online (Sandbox Code Playgroud)

gcc tcmalloc

8
推荐指数
1
解决办法
9855
查看次数

使用tcmalloc/jemalloc和自定义内存池管理器

我想用一个高性能通用分配器喜欢jemalloc/ tcmalloc有一个内存池.这样做有指导吗?我不想使用jemalloc/ tcmalloc作为替代品malloc.

我有内存池使用libarena和雕刻一个较大的内存区域(2GB).我想gslice在这个竞技场上创建固定大小的对象池,例如1 GB.(像Bonwick slab分配器一样)并且希望将剩余的内存用于可变大小的通用分配.我想拥有jemalloc/ tcmalloc使用这个记忆区域.这可能吗?关于如何进行的任何想法?如果有一个备用库,我也想听听它.

c memory allocator tcmalloc

8
推荐指数
1
解决办法
1685
查看次数

如何追踪"tcmalloc:large alloc ...."

我的应用程序打印几行如:

tcmalloc: large alloc 4294488064 bytes == 0x2b968d8000 @  0x727432 0x727302 0x727a58    0x75a07d 0x574beb 0x585756 0x5575df 0x5717db 0x57108f 0x58078c 0x302b80610a
tcmalloc: large alloc 4294488064 bytes == 0x2c97063000 @  0x727432 0x727302 0x727a58   0x75a07d 0x574beb 0x585756 0x5575df 0x5717db 0x57108f 0x58078c 0x302b80610a
tcmalloc: large alloc 4294488064 bytes == 0x2b968d8000 @  0x727432 0x727302 0x727a58 0x75a07d 0x574beb 0x585756 0x5575df 0x5717db 0x57108f 0x58078c 0x302b80610a
Run Code Online (Sandbox Code Playgroud)

这条消息来自哪里?这是否意味着我的应用程序有一些错误或内存泄漏?我该如何追查根本原因?

c++ memory-management tcmalloc

7
推荐指数
1
解决办法
1万
查看次数

有谁能够在使用共享DLL的Windows 64位应用程序上集成tcmalloc?

我有一个要与tcmalloc集成的64位Visual Studio 2010(单线程)C ++ Windows应用程序,使用任何动态链接的dll时都遇到问题。我将tcmalloc链接为静态库。tcmalloc可以很好地工作,直到应用程序开始使用我们共享的dll之一。我将解决方案构建为64位DEBUG应用程序。dll的所有链接都与CRT库的C / C ++调试版本(MSVCP100D.dll和MVCR100D.dll)链接。

以下是失败代码的示例。将为所有内存分配调用tcmalloc,但是调用delete时,应用程序崩溃。当我在主可执行文件中创建函数并将代码复制到那里时,完全相同的代码可以正常工作,这让我感到非常困惑。

如果有人在这种情况下使用tcmalloc有任何经验,我将感谢您的反馈。这对我来说是个谜。dll的内存模型问题(不同的堆??)吗?我不知道。在我看来,他们正在使用同一堆。

抱歉,如果这篇文章太长。我试图提供尽可能多的信息。

谢谢。

布鲁斯

更新:作为测试,我将崩溃的共享dll更改为静态库,并且一切正常,直到应用程序使用其他dll。因此,无论出于何种原因,tcmalloc都需要一些其他步骤来处理共享的dll。我可以使用tcmalloc来制作所有dll的静态库以进行内存分析,但是,知道将tdllalloc与共享dll一起使用还需要做些什么,这真的很高兴。

DLL标头文件方法声明:__declspec(dllexport)static std :: string GetExecutablePath();

//.cpp实现

string Parameters::GetExecutablePath()

    string  execPathStr;
    char exeFilePath[ MAX_PATH +1];
    if ( GetModuleFileName( NULL, exeFilePath, MAX_PATH ) )
    {
        //The line of code below is where the app crashes.
        //It calls operator new in crt/src/new.cpp. I verified the call to malloc
        //is forwarded to tcmalloc. 
        *execPathStr = string(exeFilePath);* //creates and deletes a temporary and then crashes

        long dir_pos = execPathStr.rfind( FT_DIR_SLASH ) …
Run Code Online (Sandbox Code Playgroud)

c++ tcmalloc memory-leak-detector

5
推荐指数
1
解决办法
4166
查看次数