【问题标题】:Startup default heap size in Linux?Linux中的启动默认堆大小?
【发布时间】:2011-05-16 08:56:01
【问题描述】:

ulimit -s 显示默认的stack大小limit

是否有启动默认的大小?

【问题讨论】:

    标签: c linux heap-memory glibc


    【解决方案1】:

    没有

    在 32 位 Linux 中,每个进程看到一个连续的 4GB 空间。大部分都没有映射到真实的 RAM,而是映射到使用情况。

    在 64 位中它类似但更大。

    【讨论】:

    • 16TB 用于 64 位,如果我没记错的话。
    • Linux 没有像 Windows 那样的独立内核空间(上 1 或 2GB)?
    • @LưuVĩnhPhúc 是的,但这映射到每个进程看到的相同连续 4GB 空间。 IOW:每个进程看到一个线性的 4GB 空间,其中一部分是为内核保留的,其余的大部分是免费的。标准库在该空间上创建堆,因此不需要“默认堆大小”,它都是可用的。最初它没有真正的 RAM 支持,但一旦进程触及新地址,操作系统就会收到通知并在那里映射一个 RAM 页面。
    【解决方案2】:

    ulimit -s 不是“默认堆栈大小”。这是堆栈大小限制。您还可以使用ulimit 命令设置各种其他限制,并且对于每个限制都有一个“软”限制(应用程序可以根据需要覆盖)和一个“硬”限制(由操作系统强制执行,并且除非你有 root,否则一旦设置就不能取消设置。

    【讨论】:

      【解决方案3】:

      我不知道默认设置堆限制的任何发行版。您可以使用“ulimit -a”进行检查,您或您的系统管理员可以在 /etc/security/{limits.conf,limits.d} 中设置一个,因此您可能希望在那里查看是否设置了一个。

      【讨论】:

        【解决方案4】:

        没有堆限制,您的应用程序可以在 32 位机器上分配 3G vm(虚拟内存),但这并不意味着应用程序有 3G 物理内存可用,取决于您内核的 OOM 策略,它会被杀死内核的OOM(Out-Of-Memory)管理器根据这些内存的使用速度/多少。

        【讨论】:

          猜你喜欢
          • 2017-07-14
          • 2011-08-29
          • 2013-08-25
          • 2012-09-19
          • 2018-11-23
          • 2014-01-11
          • 2010-12-07
          • 2013-10-02
          • 2015-04-01
          相关资源
          最近更新 更多