问题标签 [tcmalloc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
114 浏览

c++ - 强制二进制文件在 Windows 中使用 TCMalloc

我有一个使用 CMake 在 Linux、MacOSX 和 Windows/Visual Studio 上构建的 C++ 应用程序。现在,我想透明地替换mallocby的使用tcmalloc,因为之前在 Linux 中的测试显示 TAT 的改进高达 15%。

为此,我在我的 CMake 文件中添加了这些设置:

C:\tmp\gperf是我的 PC 中我放置libtcmalloc_minimal.dll文件和相关libtcmalloc_minimal.lib导入库的路径)。

但是,dumpbin /dependents MY_APP.exe根本不显示libtcmalloc_minimal.dll(因为它确实显示了我的应用程序使用的其他 DLL)。但是,在 Linux/MacOSX 中使用相同的 CMakeLists.txt(当然,库搜索路径有明显的变化)ldd/otool确实显示了对libtcmalloc_minimal.so/dylib

所以我的问题是:

为了强制使用 tcmalloc 提供的 malloc 实现而不是标准实现,我在 Windows 中缺少什么?

tcmalloc 文档讨论了有关直接从 Visual Studio 修改项目文件的一些内容,但这在我的情况下并不是真正适用的解决方案(由于 CMake,所有构建过程都在脚本中自动化,我什至从未打开 Visual Studio 界面进行其他任何操作比调试)。

非常感谢你的帮助。

0 投票
1 回答
281 浏览

c++ - 了解 TCMalloc 的“释放到操作系统的字节数(又名未映射)”统计信息

我有一个进程在启动时会消耗大量内存,但在进程启动后会释放大部分内存。我在之后打印的 TCMalloc 统计信息中看到以下内容:

在这里,我们看到有 ~228 MB “释放到操作系统”,但它也表明这仍然是进程虚拟地址空间的一部分。使用 ps aux 看到的 VSZ stat 在看到此日志记录后仍然很高这一事实证实了这一点。

当我使用 strace 运行相同的程序时,我可以看到:对 brk 的所有调用都在增加,并且对 munmap 的调用(就大小而言)不等于 mmap-ed 的数量(如上所示) . 更糟糕的是,随着我的进程执行后台工作,VSZ 随着时间的推移缓慢增加,并且日志显示(***)在记录这些统计信息时相应增加。

所以我的问题是:这个值代表什么?我的记忆是否被释放了?我能做些什么来防止这种消费增长?

0 投票
1 回答
189 浏览

libstdc++ - nix-info 找不到 libstdc++.so.6

我之前用 nix 处理了一些东西,它起作用了。但现在我不断得到这个:

如果我在某个项目中使用 nix-shell,它会首先安装这些东西,但是当它完成安装后,由于缺少 libstdc++,它无法运行。

nix 不提供自己的 libstdc++ 吗?

0 投票
1 回答
30 浏览

tcmalloc - 如何检查预编译的 libtcmalloc.so 是否在没有 libunwind 的情况下编译?

我什至不知道从哪里开始,为菜鸟问题道歉,但似乎在这个特定案例中没有任何内容,除非有更多我不知道的通用术语。

0 投票
1 回答
284 浏览

go - 如何知道 golang 在堆或堆栈上分配的变量?

我阅读了 golang 常见问题解答:https ://go.dev/doc/faq#stack_or_heap,我想知道 golang 何时在堆栈或堆上分配变量。所以我编写如下代码:

然后看看编译器是如何分配内存的。 cmd 是go tool compile "-m" main.go 输出如下:

我的问题是:为什么golang不将变量AB分配testStackOrHeap()到堆栈中,它们无法逃逸到堆栈帧,如果分配到堆,gcworker需要收集它,但如果它分配在堆栈中,它将在函数返回时释放。