我讀的地方,呼籲免費使用相同的指針參數兩次會導致不確定的行爲。那麼免費怎麼知道它有多少內存要釋放?當我們調用malloc/calloc/realloc時,堆總是分配連續的內存嗎?請提供相關文章/帖子/博客等的鏈接。
1
A
回答
5
如何malloc
和free
工作是實現定義的。通常有關內存塊的信息將存儲在低於ptr
的標題中。但不一定。
關於malloc
和free
的好處是您不需要知道它們是如何工作的。系統爲您處理細節。
我讀了一個地方,使用相同的指針參數調用兩次空閒導致未定義的行爲。爲了理解這一點,我必須首先知道自由的工作方式?
我不確定我是否同意這一說法。你只需要遵循規則。
當我們調用malloc/calloc/realloc時,堆總是分配連續的內存嗎?
如果您的意思是返回的內存塊在地址空間中是連續的,那麼是的。如果你的意思是連續的分配是連續的,那麼沒有。
0
如果您想查看實現,請查找glibc,它是包含內存管理功能的C標準庫的GNU實現。但請注意,實現的確切細節在其他平臺上會有所不同,並可能在標準庫的各個版本之間發生變化。
1
您可以閱讀關於tcmalloc頁面上的示例實現。這是相對短而直接:http://goog-perftools.sourceforge.net/doc/tcmalloc.html(跳轉到概述)
如果你想知道malloc如何從操作系統請求內存,它通常是通過調用sbrk
或mmap
。但是這當然是實現定義的。
相關問題
- 1. 如何跟蹤malloc和free?
- 2. 如何在C#中實現malloc操作#
- 3. C指針分配malloc()和free()C
- 4. 在Objective-C對象中使用malloc/free
- 5. malloc和free的代碼
- 6. C malloc/free + fgets性能
- 7. SECCOMP:如何模擬malloc,realloc和free?
- 8. free()C中的2D數組使用malloc
- 9. 在android中使用malloc/free
- 10. Malloc實現與C
- 11. 由malloc和free行爲
- 12. free from malloc
- 13. LD_PRELOADing malloc and free
- 14. Suse中的Malloc/free算法
- 15. 在C++中定製實現malloc
- 16. C++中的malloc/free和new/delete兼容性?
- 17. malloc的實現?
- 18. 用C++替換malloc/free /刪除
- 19. 如何確保malloc/free fopen/fclose匹配?
- 20. 在此代碼中替換malloc/free
- 21. vtable如何在C++和c#中實現?
- 22. malloc()如何在內部實現?
- 23. Boost pool malloc()和free()編譯器錯誤
- 24. Visual Studio 2010 Ultimate,查找malloc()和free()對
- 25. 錯誤使用malloc()和free()函數
- 26. 內存峯值,並使用malloc和free
- 27. static_cast是如何在C++中實現的?
- 28. C:malloc(),free(),然後再次malloc()確實總是一樣嗎?
- 29. 在java中是否有像malloc/free一樣的東西?
- 30. AMESim中malloc/free 2D數組的問題
你並不需要知道自由工作是如何理解的。只要你記得在指針上釋放後,你不再擁有該位置的內存。嘗試訪問它,你會受到懲罰。 – 2011-10-09 20:48:53
@WTP:我只是好奇它如何在引擎蓋下工作。 – Bruce
也許你應該改變你的問題,說你想知道如何實現malloc/free。聲明「爲了理解這一點,我必須先了解自由作品」是否有誤導性。 –