为什么我要限制“.data”段的大小?

为什么我要限制“.data”段的大小?

这个答案在 StackOverflow 上,它说:

例如,在 Linux 上,如果您在源中初始化数据(而不是在运行时读取文件),则数据将存储在 .data 段中。该段的大小可以通过内核选项来限制。您可以使用 ulimit -d 找到当前限制。

在我的 Linux 和 macOS 机器上,我得到:

$ ulimit -d
unlimited

为什么我想要配置 .data 段的大小限制?

答案1

ulimit -d设置 a 的最大尺寸过程的数据段,而不仅仅是a的最大大小二进制的.data 段。您可以使用它来限制进程可以使用的内存量;按照POSIX

RLIMIT_DATA

这是进程数据段的最大大小,以字节为单位。如果超过此限制,则malloc()功能将失败错误号设置为 [ENOMEM]。

该限制适用于二进制文件,因为数据段受到限制的进程将无法使用exec.data 段大于数据段限制的二进制文件。但此后该限制仍然适用,因此在进程运行时数据段的增长不能超过该限制。

与所有限制一样,这与许多场景相关。在多用户系统上,您需要设置限制,以便单个用户不能独占系统资源,或影响其他用户使用系统的能力。您还可以设置限制,以便单个进程不能独占系统资源(例如网络浏览器,或大型构建......)。现在,您可能最好在 Linux 系统上使用 cgroup 之类的东西来进行此类资源控制。

相关内容