【问题标题】:How is RAM and Heap Space allocated for a linux/unix command?如何为 linux/unix 命令分配 RAM 和堆空间?
【发布时间】:2015-02-18 14:04:16
【问题描述】:

因此,当我在具有 128 GB RAM 的服务器上执行 linux 命令时,例如此示例中的 cat 命令,假设当前没有任何 RAM 正在使用,那么一切都是免费的。 (我意识到这永远不会发生,但这就是为什么它是一个例子)

1) 这个命令会在全部 128 GB 的堆空间中执行吗?还是由我使用的 linux 发行版来决定从可用的 128 GB 中分配多少堆空间?

2) 如果是这样,是否有另一个命令行参数可以与我的cat 命令一起传递以保留比系统标准更多的堆空间?

编辑:3)有没有一种方法可以确定将为我的cat 命令(或任何命令)分配多少堆空间,最好是内置命令行解决方案,而不是外部应用程序。如果不可能,请这么说,我只是好奇。

【问题讨论】:

  • 我相信您可以使用 ulimit 命令设置 shell 允许的最大内存,也适用于每个用户:unix.stackexchange.com/questions/34334/…
  • 这很有趣。是否可以查看分配给特定用户 ID 的堆空间?
  • 我总是很乐意提供帮助,但是 (1) 这不是编程问题,而是操作系统问题,因此更适合 unix stackexchange,并且 (2) “让我用谷歌搜索一下给你”;-)。

标签: linux memory-management command-line heap-memory


【解决方案1】:

当您启动一个程序时,会为该程序分配一些内存;但是,这个内存量并不是程序可以使用的限制。每当请求更多内存时,都可以授予它,直到系统用完所有内存。

【讨论】:

  • 这是一个很好的答案。你能回答我上面的第三点吗?
  • @dracom 无法提前知道将分配多少堆空间。对于任何非平凡的程序,它取决于程序的执行路径和输入。
  • 对我来说已经足够好的答案了。
【解决方案2】:

由内存分配器(通常在 libc 中找到)来确定要分配多少堆。 glibc 的分配器不使用任何环境变量,但其他替换可以。

【讨论】:

    猜你喜欢
    • 2014-03-05
    • 2017-07-18
    • 2015-06-10
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 2018-11-16
    • 2010-09-17
    • 2021-12-05
    相关资源
    最近更新 更多