您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Python中使用<128KB的字符串时发生内存泄漏?

在Python中使用<128KB的字符串时发生内存泄漏?

您可能只是点击了Linux内存分配器的认行为。

基本上,Linux有两种分配策略:sbrk()用于较小的内存块,mmap()用于较大的内存块。分配给sbrk()的内存块不容易返回到系统,而基于mmap()的内存块可以(只是取消映射页面)。

因此,如果分配的内存块大于libc中malloc()分配器决定在sbrk()和mmap()之间切换的值,则会看到这种效果。请参阅mallopt()调用,尤其是MMAP_THRESHOLD(http://man7.org/linux/man- pages/man3/mallopt.3.html)。

要回答您的另一个问题:是的,如果内存分配器的工作方式类似于Linux上的libc,则希望以这种方式泄漏内存。如果改用Windows LowFragmentationHeap,则可能不会泄漏,这与在AIX上类似,具体取决于配置的malloc。也许其他分配器之一(tcmalloc等)也解决了此类问题。sbrk()速度非常快,但是存在内存碎片问题。cpython不能做很多事情,因为它没有紧凑的垃圾收集器,但是引用计数很简单。

Python提供了一些减少缓冲区分配的方法,例如,请参见此处的博客文章http ://eli.thegreenplace.net/2011/11/28/less-copies-in-python-with-the-buffer- protocol和内存视图/

python 2022/1/1 18:46:21 有297人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶