关于c语言调用malloc的问题

调用malloc申请空间时,扫描的空闲块链表是谁维护的或者是谁提供的

啥意思?内存分配当然都由操作系统来管理

内存由编译器调用系统函数申请,然后分配给变量。
如果深究的话,参考如下:

答案是标准没有规定,因此不能断言
一般是OS(操作系统底层)和CRT(运行时库)共同决定。
补充:不由操作系统全权负责的原因在于,内核级调用需要陷入内核,这个上下文切换具有时间开销,每次都陷入内核会造成巨大的性能问题。因此,CRT会统一管理分配需求,实际需要访问时再实际分配,通常是在缺页中断时进行分配。注意:这只是通常的实现,直接陷入内核也符合标准。
页号、段号等等,都只是通常实现,不能代表标准。由于并非所有OS都采用段页式管理,因此网络上多数有关文章是并不全面的,事实上也不可能做到全面:因为不同OS的底层实现可以完全不同,甚至可能根本没有虚拟地址,而是直接采用物理地址(例如BIOS刚刚引导启动时的情形),这时根本就没有段号和页号可言。当然,OS启动到这个阶段,也有可能尚未提供内存分配支持。非常重要的是,空闲块维护最底层当然是在OS,但malloc是CRT提供的,而不是OS提供的