关于malloc!该如何解决

关于malloc!!!
请问下面的理解是否正确:
如果静态分配地址,那么编译器在编译(链接)后就将其确定下来了。但是动态分配是如何实现的呢?malloc就是一个例子。
我们知道,malloc是从堆里面来取得内存的,那么,堆的信息是谁提供的呢?也就是说,malloc怎么保证每次分配的内存都不会重迭呢(在之前的内存未释放的情况下)?应该是操作系统提供了相关信息吧。如果是,那么malloc的移植性怎么得到保证?现在很多MCU的厂商提供的编译器都支持C编程,那是不是意味着在这种情况下malloc不能被运用?(因为没有相应的操作系统,就算有,也不知道是不是malloc支持的?)我现在用的是SUNPLUS的芯片。请各位不吝赐教。

------解决方案--------------------
很多C编译器(特别是嵌入式系统的C编译器)都是自己管理堆的。通常需要在链接的时候指定heap的大小,有的还需要指明位置。这种C编译器的malloc会自己管理堆中的MCB结构。
------解决方案--------------------
malloc是一个标准接口的函数,当你使用一个函数时,一定是在一个特定的操作系统上,使用了一个特定的编译器,这样两者就决定了malloc的机制。

使用malloc时可以忽略这些后台的实现细节吧,一般而言关于内存的操作肯定是要经过操作系统“同意”的,换句话就是说要使用操作系统提供的功能。

不过编译器在操作系统的基础上面可以自己替换一种内存管理方法。

其实自己都可以在程序中对内存管理做替换,或者说实现自己的内存管理策略。例如在C++ 中就可以重载new 和delete 操作符。


------解决方案--------------------
MCU的厂商提供的编译器都支持C编程,但是他们用自己的库,也就是说每个malloc的实际版本是不同的