當我的應用程序中實現nedmalloc時,我經常遇到一種情況,當nedmalloc拒絕釋放一塊內存時,聲稱它沒有分配它。nedmalloc:mem> = fm從哪裏來?
我正在使用v1.06beta1_svn1151版本。
在調試過程中,我發現一個特定的條件失敗,所有其他(包括幻數)成功。條件是這樣的:
if((size_t)mem-(size_t)fm>=(size_t)1<<(SIZE_T_BITSIZE-1)) return 0;
在Win32這似乎是等同於:
if((int)((size_t)mem-(size_t)fm)<0) return 0;
這似乎是一樣的:
if((size_t)mem<(size_t)fm) return 0;
在我來說,我真的看到MEM < fm。我現在不明白的是,這種情況從何而來。我找不到任何能夠保證代碼中任何地方的任何東西。然而,「選擇沒有破裂」:我懷疑它確實是nedmalloc中的一個錯誤,很可能我在某處做錯了什麼,但是我找不到它。一旦我打開了nedmalloc的調試功能,問題就消失了。
如果有人在這裏瞭解nedmalloc的內部工作,請你向我解釋爲什麼fm < = mem保證?
當前nedmalloc源代碼,我無法找到。你正在使用哪個版本? – Thomas 2010-03-25 16:22:43
瘋狂。我沒有想到,爲這種詳細的技術問題問題upvote,特別是。這不是很快。有人在那裏喜歡並理解這些東西,或者猴子程序員已經在這裏,隨機提問? (但是他們怎麼能夠得到足夠的聲望去投票?)無論如何,我希望有人會回答 - 在這種情況下,這對我來說比聲譽更重要。 – Suma 2010-03-25 16:23:40
你提出了一個很好的描述問題,希望這將產生約內存管理一個有趣的問題了一些解釋,所以難怪有人upvoted你。 – Francesco 2010-03-25 16:55:48