小编lbo*_*lla的帖子

使用MALLOC_MMAP_THRESHOLD_和MALLOC_MMAP_MAX_减少内存碎片

我一直在尝试使用MALLOC_MMAP_THRESHOLD_和MALLOC_MMAP_MAX_ env变量来影响长时间运行的Python 2进程中的内存管理.见http://man7.org/linux/man-pages/man3/mallopt.3.html

我从这个错误报告中得到了这个想法:http://bugs.python.org/issue11849

我得到的结果令人鼓舞:内存碎片减少,长时间运行过程中使用的内存中可见的典型高水位标记较低.

我唯一担心的是,当使用这种低级别的调整时,是否还有其他可能会产生副作用的问题.有没有人有使用它们的经验?

下面是一个示例脚本,显示这些变量如何影响生成大型字典的脚本中的RSS内存:https: //gist.github.com/lbolla/8e2640133032b0a6bb9c只需运行"alloc.sh"并比较输出.这是我的输出:

MALLOC_MMAP_THRESHOLD_=None MALLOC_MMAP_MAX_=None
N=9 RSS=120968
MALLOC_MMAP_THRESHOLD_=512 MALLOC_MMAP_MAX_=None
N=9 RSS=157008
MALLOC_MMAP_THRESHOLD_=1024 MALLOC_MMAP_MAX_=None
N=9 RSS=98484
MALLOC_MMAP_THRESHOLD_=2048 MALLOC_MMAP_MAX_=None
N=9 RSS=98484
MALLOC_MMAP_THRESHOLD_=4096 MALLOC_MMAP_MAX_=None
N=9 RSS=98496
MALLOC_MMAP_THRESHOLD_=100000 MALLOC_MMAP_MAX_=None
N=9 RSS=98528
MALLOC_MMAP_THRESHOLD_=512 MALLOC_MMAP_MAX_=0
N=9 RSS=121008
MALLOC_MMAP_THRESHOLD_=1024 MALLOC_MMAP_MAX_=0
N=9 RSS=121008
MALLOC_MMAP_THRESHOLD_=2048 MALLOC_MMAP_MAX_=0
N=9 RSS=121012
MALLOC_MMAP_THRESHOLD_=4096 MALLOC_MMAP_MAX_=0
N=9 RSS=121000
MALLOC_MMAP_THRESHOLD_=100000 MALLOC_MMAP_MAX_=0
N=9 RSS=121008
MALLOC_MMAP_THRESHOLD_=512 MALLOC_MMAP_MAX_=16777216
N=9 RSS=157004
MALLOC_MMAP_THRESHOLD_=1024 MALLOC_MMAP_MAX_=16777216
N=9 RSS=98484
MALLOC_MMAP_THRESHOLD_=2048 MALLOC_MMAP_MAX_=16777216
N=9 RSS=98484
MALLOC_MMAP_THRESHOLD_=4096 MALLOC_MMAP_MAX_=16777216
N=9 RSS=98496
MALLOC_MMAP_THRESHOLD_=100000 MALLOC_MMAP_MAX_=16777216
N=9 RSS=98528
Run Code Online (Sandbox Code Playgroud)

如您所见,对于此示例,使用的RSS比vanilla Python少约20%.

python malloc mmap

10
推荐指数
1
解决办法
1865
查看次数

用户定义的List实例

这应该是非常简单的,但我似乎无法解决它.

假设我有我自己的List类,声明headtail在其接口.List应该是你所期望的,这是一个同类物品的集合.然后,我想创建一个data实现List接口的类型.

以下代码是我提出的,但它不起作用:你将如何解决它?

class List l where                                                             
    head :: l -> a  -- ERROR! How do I tell: given a list, return an element?                                                      
    tail :: l -> l                                                             

data ConsList a = Nil | Cons a (ConsList a)                                    

instance List (ConsList Int) where                                             
    head Nil = error "Empty List"                                              
    head (Cons h _) = h                                                        
    tail Nil = error "Empty List"                                              
    tail (Cons _ t) = t                       
Run Code Online (Sandbox Code Playgroud)

提前致谢!

haskell types class

2
推荐指数
2
解决办法
158
查看次数

标签 统计

class ×1

haskell ×1

malloc ×1

mmap ×1

python ×1

types ×1