0

所以,标题描述了几乎所有必要的回答我。还有一件事:请回复默认安装 Python 的库,因为我正在开发的应用程序是 Ubuntu App Showdown 的一部分。

运行 Python 2.7、Ubuntu 12.04。

4

1 回答 1

1

您要求的是一个几乎无法计算且价值很小的数字。

任何运行一段时间的 Linux 系统都几乎没有可用的“空闲”内存。只是 cat /proc/meminfo-MemFree条目通常只有几兆字节。

那么,那段记忆去哪儿了?

对于初学者,内核缓存所有磁盘访问。这通常在Cached条目中可见。当您需要更多内存时,磁盘缓存将被修剪,因此您可以将该数字添加到MemFree.

但是,如果应用程序malloc()在恰好有 2 GB RAM 的系统上分配(用 C 语言)2 GB,通常只会被授予:您会得到一个有效的指针。但是,实际上并没有为您的应用程序保留任何 RAM - 只有当您的应用程序开始接触内存页面时才会发生这种情况 - 每个接触的页面都会被分配。您可以要求的最大尺寸为CommitLimit.

但是应用程序代码本身也可能不在 RAM 中 - 二进制文件和库是 mmapp()ed,因此只有被触摸的页面才会加载到 RAM 中。

如果你运行一个工具top,你会得到每个进程的各种内存信息,包括 VIRT、RES 和 SHR。

  • VIRT 用于“虚拟”——应用程序需要的所有内存页面,如果它要求它要求的所有页面。
  • RES 是“常驻的”——实际使用的内存量
  • SHR 是“共享的”——与其他应用程序共享的页面数量,例如在多个应用程序中加载的库。

那么,知道有多少可用内存有什么价值呢?您可以启动一个可能需要比您的系统更多的 RAM 的应用程序,但它仍然运行......您甚至可以运行该应用程序两次或三次 - 代码页无论如何都是共享的......

注意:上述答案切入了很多角落,真正的机制要复杂得多。而且我什至还没有开始将交换空间带入故事中。但这对你有用,我希望......

于 2012-06-23T15:55:04.493 回答