Ulimit

為什麼要限制“.data”段的大小?

  • March 2, 2017

在StackOverflow 上的這個答案中,它說:

例如,在 Linux 上,如果您在源中初始化數據(而不是在執行時讀取文件),則數據將儲存在 .data 段中。該段的大小可以受核心選項的限制。您可以使用 ulimit -d 找到目前限制。

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

$ ulimit -d
unlimited

為什麼我要配置 .data 段的大小限制?

ulimit -d設置程序的數據段的最大大小,而不僅僅是二進制的 .data 段的最大大小。您可以使用它來限制程序可以使用的記憶體量;根據POSIX

RLIMIT_DATA

這是程序的數據段的最大大小,以字節為單位。如果超出此限制,則malloc()函式將失敗,並將errno設置為

$$ ENOMEM $$.

該限制適用於二進製文件,因為其數據段已受到限制的程序將無法生成exec具有大於數據段限制的 .data 段的二進製文件。此後限制繼續應用,因此數據段在程序執行時不能超過限制。

像所有限制一樣,這在許多情況下都是相關的。在多使用者系統上,您需要設置限制,以便單個使用者不能獨占系統資源,或影響其他使用者使用系統的能力。您還可以設置限制,以使單個程序無法獨占系統資源(例如Web 瀏覽器或大型建構…)。現在,您最好在 Linux 系統上使用 cgroups 之類的東西來進行這種資源控制。

引用自:https://unix.stackexchange.com/questions/348643