0

我正在使用Doug Lea 的 dlmalloc 内存分配器。但是,当我使用它时,我会得到分段。如果我使用正常的 malloc,我的程序运行良好。我记得我曾经读到你需要先调用一些初始化函数才能使 dlmalloc 工作,但我现在不记得是哪个函数了。我试图查看评论以找出哪个功能,但仍然找不到。

4

1 回答 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 回答