在这个答案在 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 之类的东西来进行此类资源控制。