有关动态内存分配的疑问
C语言中, 进程在运行用malloc动态申请内存,用完后释放。进程结束时,所有动态申请的内存都会自动释放。为什么动态申请的内存在进程结束的时候会自动释放呢,malloc函数到底做了什么?操作系统是怎么知道哪些内存块是这个进程申请的?它又是怎么释放这些内存的,是调用free吗?
[解决办法]
学下操作系统吧!
之后你就应该明白
[解决办法]
《数据结构》严蔚敏 第8章 动态存储管理
[解决办法]
《windows核心编程》,《unix高级环境编程》
[解决办法]
这个是操作系统实现的堆内存管理机制所决定的。
拿windows来举例,你开始一个进程,对于每一个模块,windows都会缺省为它准备一个堆,当你调用malloc时,最终会调用到windows的virtualalloc,然后在堆中分配。当堆不够用时,windows会自动为它增加容量。因此,就算你不调用free,在释放进程时,相应的堆就会被销毁。而分配的内存也会被自动释放。