【发布时间】:2012-06-07 15:42:20
【问题描述】:
我是嵌入式开发的新手,我发现传统 Linux 和 uClinux 之间的最大区别是 uClinux 缺少 MMU。
来自this article:
如果没有 VM,每个进程都必须位于内存中可以运行的位置。在最简单的情况下,这个内存区域必须是连续的。一般来说,它不能扩展,因为它上面和下面可能还有其他进程。这意味着 uClinux 中的进程无法像传统 Linux 进程那样在运行时增加其可用内存的大小。
对我来说,这听起来像是所有数据都必须驻留在堆栈上,而且堆分配是不可能的,这意味着 malloc() 和/或“new”是不可能的......这准确吗?也许有一些技术/库允许管理“静态堆”(即可以请求“动态”分配的基于堆栈的区域)?
还是我想多了?还是过度简化?
【问题讨论】:
-
在启动程序之前仍然可以选择设置适当的大小。即使在虚拟内存系统中,大小也仅限于最大地址空间,例如 32 位系统上的 2 或 4GB。这里的限制(物理内存)只是由所有程序共享。
-
@BoPersson - 什么“合适的大小”?
-
在加载其他程序之前,您必须保留程序所需的空间。不同之处在于它们都共享相同的地址空间,因此它们的总大小将相加。使用虚拟内存,地址空间独立于其他程序。这里不是。
标签: c++ c virtual-memory uclinux mmu