我读的地方,呼吁免费使用相同的指针参数两次会导致不确定的行为。那么免费怎么知道它有多少内存要释放?当我们调用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. 在Objective-C对象中使用malloc/free
- 4. C malloc/free + fgets性能
- 5. SECCOMP:如何模拟malloc,realloc和free?
- 6. 由malloc和free行为
- 7. free from malloc
- 8. Suse中的Malloc/free算法
- 9. malloc的实现?
- 10. 如何确保malloc/free fopen/fclose匹配?
- 11. Visual Studio 2010 Ultimate,查找malloc()和free()对
- 12. Boost pool malloc()和free()编译器错误
- 13. malloc()如何在内部实现?
- 14. vtable如何在C++和c#中实现?
- 15. static_cast是如何在C++中实现的?
- 16. 在java中是否有像malloc/free一样的东西?
- 17. 在C中,malloc(256)和malloc(sizeof(char)* 256)是否相等?
- 18. 我如何基准malloc实现?
- 19. malloc/free。可以从释放的内存
- 20. 另一个malloc/free的难题
- 21. malloc和堆在C
- 22. malloc的替代实现
- 23. 在arm7中使用gcc实现malloc问题:malloc返回NULL
- 24. 如果我使用new或free来使用malloc,结果如何?
- 25. linux new/delete,malloc/free大内存块
- 26. C中的内存分配测试 - 如何为malloc和free编写一个CUnit-Test?
- 27. 有问题,写我自己的malloc,free和realloc
- 28. malloc和free:被释放的指针没有被分配
- 29. 在C中使用free()
- 30. 如何在C#中实现Javascript的XmlHttpRequest?
你并不需要知道自由工作是如何理解的。只要你记得在指针上释放后,你不再拥有该位置的内存。尝试访问它,你会受到惩罚。 – 2011-10-09 20:48:53
@WTP:我只是好奇它如何在引擎盖下工作。 – Bruce
也许你应该改变你的问题,说你想知道如何实现malloc/free。声明“为了理解这一点,我必须先了解自由作品”是否有误导性。 –