존재하다이 답변StackOverflow에서는 다음과 같이 말합니다.
예를 들어 Linux에서 런타임에 파일을 읽는 대신 소스에서 데이터를 초기화하면 데이터가 .data 섹션에 저장됩니다. 이 세그먼트의 크기는 커널 옵션을 통해 제한될 수 있습니다. ulimit -d를 사용하여 현재 제한을 찾을 수 있습니다.
내 Linux 및 macOS 컴퓨터에서는 다음을 얻습니다.
$ ulimit -d
unlimited
.data 섹션에 크기 제한을 구성하려는 이유는 무엇입니까?
답변1
ulimit -d
최대 크기를 설정합니다.프로세스데이터 세그먼트의 최대 크기뿐만 아니라바이너리.data 섹션. 이를 사용하여 프로세스가 사용할 수 있는 메모리 양을 제한할 수 있습니다.POSIX:
RLIMIT_DATA
이는 프로세스 데이터 세그먼트의 최대 크기(바이트)입니다. 이 한도를 초과하면malloc()기능이 실패할 것이다오류 번호[ENOMEM]으로 설정합니다.
exec
데이터 세그먼트 제한이 있는 프로세스는 데이터 세그먼트 제한보다 큰 .data 세그먼트가 있는 바이너리 파일을 사용할 수 없기 때문에 이 제한은 바이너리에 적용됩니다 . 그러나 이후에도 제한이 계속 적용되므로 프로세스가 실행되는 동안 데이터 세그먼트는 이 제한을 초과하여 커질 수 없습니다.
모든 제한 사항과 마찬가지로 이는 많은 시나리오와 관련이 있습니다. 다중 사용자 시스템에서는 단일 사용자가 시스템 리소스를 독점하거나 다른 사용자의 시스템 사용을 방해할 수 없도록 제한을 설정해야 합니다. 단일 프로세스가 시스템 리소스를 독점할 수 없도록 제한을 설정할 수도 있습니다(예를 들어웹 브라우저 또는 대규모 빌드...). 이제 이러한 유형의 리소스 제어를 위해 Linux 시스템에서 cgroup과 같은 것을 사용하는 것이 더 나을 것입니다.