我正在使用Doug Lea 的 dlmalloc 内存分配器。但是,当我使用它时,我会得到分段。如果我使用正常的 malloc,我的程序运行良好。我记得我曾经读到你需要先调用一些初始化函数才能使 dlmalloc 工作,但我现在不记得是哪个函数了。我试图查看评论以找出哪个功能,但仍然找不到。
问问题
479 次
1 回答
3
从分配器源代码中的注释:
Tread-safety:不是线程安全的,除非 USE_LOCKS 定义为非零
定义 USE_LOCKS 后,对 malloc、free 等的每个公共调用都被锁包围。默认情况下,这使用普通的 pthread 互斥锁、win32 临界区或自旋锁(如果适用于平台且未通过设置 USE_SPIN_LOCKS=0 禁用)。
您需要使用 编译库USE_LOCKS
,否则您可能会看到崩溃。
另一种可能性是您的程序表现出未定义的行为,不会导致常规malloc
. 例如,它可能会在某处的分配区域之后写入一个字节,但该字节可能是内存块的一部分,比您请求的要大几个字节。在将程序与自定义分配器链接之前,使用 valgrind 使用“常规”malloc 检查您的程序是否存在内存错误。
于 2012-07-03T10:28:34.197 回答