最常见的答案是答案.
释放堆是操作系统的责任.虽然大多数操作系统(尤其是主流操作系统)在退出时释放堆,但对于嵌入式系统操作系统来说并不一定如此.
当您要求在堆上分配内存时,会对OS的内核空间进行系统调用以提供此内存.此内存映射到您的进程结构,该结构由操作系统维护.当程序退出时,操作系统会通过清理路由,关闭所有文件描述符,并将此内存标记为空闲,以便分配给其他进程(以及其他内容).
其中一些答案在说它依赖于编译器时是不正确的.编译器没有说'嘿,在程序退出时释放所有这些内存'.这没有意义,如果操作系统意外终止程序会发生什么?不,只要为堆明确请求内存分配/释放,编译器就负责生成系统调用.