".data" 섹션의 크기를 제한해야 하는 이유는 무엇입니까?

".data" 섹션의 크기를 제한해야 하는 이유는 무엇입니까?

존재하다이 답변StackOverflow에서는 다음과 같이 말합니다.

예를 들어 Linux에서 런타임에 파일을 읽는 대신 소스에서 데이터를 초기화하면 데이터가 .data 섹션에 저장됩니다. 이 세그먼트의 크기는 커널 옵션을 통해 제한될 수 있습니다. ulimit -d를 사용하여 현재 제한을 찾을 수 있습니다.

내 Linux 및 macOS 컴퓨터에서는 다음을 얻습니다.

$ ulimit -d
unlimited

.data 섹션에 크기 제한을 구성하려는 이유는 무엇입니까?

답변1

ulimit -d최대 크기를 설정합니다.프로세스데이터 세그먼트의 최대 크기뿐만 아니라바이너리.data 섹션. 이를 사용하여 프로세스가 사용할 수 있는 메모리 양을 제한할 수 있습니다.POSIX:

RLIMIT_DATA

이는 프로세스 데이터 세그먼트의 최대 크기(바이트)입니다. 이 한도를 초과하면malloc()기능이 실패할 것이다오류 번호[ENOMEM]으로 설정합니다.

exec데이터 세그먼트 제한이 있는 프로세스는 데이터 세그먼트 제한보다 큰 .data 세그먼트가 있는 바이너리 파일을 사용할 수 없기 때문에 이 제한은 바이너리에 적용됩니다 . 그러나 이후에도 제한이 계속 적용되므로 프로세스가 실행되는 동안 데이터 세그먼트는 이 제한을 초과하여 커질 수 없습니다.

모든 제한 사항과 마찬가지로 이는 많은 시나리오와 관련이 있습니다. 다중 사용자 시스템에서는 단일 사용자가 시스템 리소스를 독점하거나 다른 사용자의 시스템 사용을 방해할 수 없도록 제한을 설정해야 합니다. 단일 프로세스가 시스템 리소스를 독점할 수 없도록 제한을 설정할 수도 있습니다(예를 들어웹 브라우저 또는 대규모 빌드...). 이제 이러한 유형의 리소스 제어를 위해 Linux 시스템에서 cgroup과 같은 것을 사용하는 것이 더 나을 것입니다.

관련 정보