当前位置: 技术问答>linux和unix
uclinux下怎样能够类似于malloc的分配内存?
来源: 互联网 发布时间:2016-06-10
本文导语: 我的程序使用了一个商业库,这个商业库中封装了内存分配函数,在它的内存分配函数中用的是malloc,我现在要在ucLinux下运行程序,需要重写它的内存分配函数,不能用malloc,是不是这样?如果不用malloc,那么在ucLin...
我的程序使用了一个商业库,这个商业库中封装了内存分配函数,在它的内存分配函数中用的是malloc,我现在要在ucLinux下运行程序,需要重写它的内存分配函数,不能用malloc,是不是这样?如果不用malloc,那么在ucLinux下该怎样处理内存分配呢?
|
uClinux是专门针对没有MMU的处理器而设计的,即uClinux无法使用处理器的虚拟内存管理技术。实际上uClinux采用实存储器管理策略,通过地址总线对物理内存进行直接访问。所有程序中访问的地址都是实际的物理地址,所有的进程都在一个运行空间中运行(包括内核进程),这样的运行机制给程序员带来了不小的挑战,在操作系统不提供保护的情况下必需小心设计程序和数据空间,以免引起应用程序进程甚至是内核的崩溃。
uClinux仍然采用存储器的分页管理,系统在启动时把实际存储器进行分页,在加载应用程序时程序分页加载。一个进程在执行前,系统必须为进程分配足够的连续地址空间,然后全部载入主存储器的连续空间中。系统不含MMU带来的另外一个问题是磁盘交换空间无法使用,对于资源有限的嵌入式系统而言,系统执行时如果缺少内存将无法通过磁盘交换来得到改善。
希望对你有帮助,我最近在写自己应用的内核内存分配算法,所以还有一点了解。
如果你想在没有mmu的系统下运行你已写的程序,那么原有的内存分配都要重写,因为你的原有程序是用户态的程序,而uclinux只有内核态,而且它只使用物理地址,如果我没有想错,你可以考虑使用alloc_pages()系列函数,该系列函数返回的4K大小的物理页框,不受虚拟地址的影响。