Closed lengkristy closed 4 years ago
贴一下复现代码
do { \
x->prev = NULL; \
x->next = head; \
if (head) head->prev = x; \
head = x; \
} while (0)
在调用MemoryPoolFree的时候,ck = (_MP_Chunk) ((char) p - MP_CHUNKHEADER);计算得出cx的alloc_mem只有440,然后赋值给head,导致mp->mlist->free_list->alloc_mem为440。在没有赋值之前,这个mp->mlist->free_list->alloc_mem为1598532628。但是我看到在mp->mlist->free_list->next中mem为1598532628,导致下一次分配内存的时候就不能分配了
反正用着就是很奇怪,我是通信服务端用的,并发也比较高
你是并发场景下用吗 有打开readme里说明的线程安全的宏定义吗
:octocat: From gitme Android
线程安全我是用的windows的机制WaitForSingleObject(mp->lock, INFINITE);
感觉这里的释放逻辑好像有点BUG,我没有仔细看过你的代码,今天才开始用
替换了MP_LOCK和MP_UNLOCK的宏定义吗
:octocat: From gitme Android
嗯,我自己单独写了两个函数进行同步控制的: //加锁 void MP_LOCK(MemoryPool* mp) { do {
WaitForSingleObject(mp->lock, INFINITE);
} while (0);
}
//解锁
void MP_UNLOCK(MemoryPool* mp)
{
do
{
SetEvent(mp->lock);
} while (0);
}。
这个不能粘短视频,不太好给你描述这个细节
方便加个wx说吗
:octocat: From gitme Android
我的微信号:lengkristy
使用windows的wchar_t分配内存后释放存在问题,本来我是分配的2G,释放之后只有几百个字节可用