我知道在Windows下,有一些API函数,比如global_alloc()等,它们分配内存并返回句柄,然后可以锁定此句柄并返回指针,然后再次解锁。解锁时,系统可以在空间不足时移动这块内存,从而优化内存使用。
我的问题是Linux下是否存在类似内容,如果没有,Linux如何优化内存使用?
答案 0 :(得分:4)
这些Windows功能来自所有程序在实模式下在相同地址空间中运行的时间。 Linux和现代版本的Windows在不同的地址空间中运行程序,因此它们可以通过重新映射page tables中特定虚拟地址解析的物理地址来在RAM中移动它们。没有必要给程序员带来如此低级别的细节。
即使在Windows上,除了与少量旧API交互外,不再需要使用此类功能。如果您对更多细节感兴趣,我相信Raymond Chen的博客和书籍会对该主题进行一些讨论。例如,这是关于GlobalLock历史的系列文章的part 4。
答案 1 :(得分:1)
不确定Linux等价物是什么,但在ATT UNIX中,核心操作系统的内存管理器中存在“分散聚集”内存管理功能。在虚拟内存操作环境中,没有绝对地址,因此应用程序没有等效功能。可执行对象加载器(将可执行文件加载到内存中,它成为进程)使用来自内存管理器的内存寻址,该内存管理器全部跟踪其页表中维护的虚拟内存块(包含物理内存地址)。底线是您的应用程序物理内存布局可能绝不是线性的或直接可访问的。