2009-06-19 2 views

답변

3

응용 프로그램에서 최대 메모리 임계 값을 넘지 않도록 확실히 할 수있는 한 가지 방법은 할당 된 메모리 양을 유지하는 자신의 특수한 malloc() 함수를 정의하는 것입니다. NULL 포인터를 반환합니다. 임계 값을 초과했습니다. 물론 이것은 malloc()이라는 반환 값을 호출 할 때마다 유용 할 것입니다. malloc()은 요청한 크기의 연속 된 메모리 블록을 찾을 것이라고 보장 할 수 없으므로 일반적으로 좋은 연습으로 간주됩니다.

단어 정렬을위한 메모리 패딩을 고려하지 않았기 때문에이 방법을 사용할 수는 없으므로 기능 보고서에 도달하기 전에 64MB 메모리 제한에 도달했을 가능성이 높습니다.

또한 Win32를 사용한다고 가정하면 현재 프로세스 크기를 가져 와서 사용자 정의 malloc() 함수에서이를 확인할 수있는 API가있을 수 있습니다. 코드에이 확인 오버 헤드를 추가하면 CPU 사용량이 늘어나고 정상보다 느리게 실행되어 다음 질문으로 이어질 수 있습니다.

또한 사용하지 않는 것이 좋습니다. more CPU 사용량입니다.

이것은 매우 일반적인 질문이며 쉬운 대답이 아닙니다. 근본적으로 같은 것을하는 두 개의 서로 다른 프로그램을 작성할 수 있으며 사용 된 알고리즘으로 인해 다른 프로그램보다 100 배 많은 CPU 집약적 인 프로그램을 작성할 수 있습니다. 가장 좋은 기술은 다음과 같습니다.

  1. 일부 성능 벤치 마크를 설정하십시오.
  2. 프로그램을 작성하십시오.
  3. 벤치 마크에 도달했는지 확인하십시오.
  4. 벤치 마크에 도달하지 않으면 최적화하고 (3) 단계로 이동하십시오.

프로파일 링 프로그램을 사용하면 알고리즘을 최적화해야하는 부분을 쉽게 찾을 수 있습니다. Rational Quantify는 상용 제품의 예이지만 많은 무료 프로파일 러도 있습니다.

+0

다른 문제는 스택 공간을 소비하지 못하도록한다는 것입니다. 스택에서 여러 메가 바이트 크기의 배열을 할당하는 경우 malloc 대신 malloc이이를 셀 수 없습니다. 이것은 부기 비용을 보상합니다. –

0

흠; 좋은 질문. 커스텀 버젼의 malloc과 free를 사용하여 힙에서 할당 된 메모리를 어떻게 처리 할 수 ​​있는지 알 수 있습니다. 그러나 스택에 강제로 적용하는 것에 대해서도 알지 못합니다. CPU를 관리하는 것이 어려워 여전히

...

흥미 롭.

유닉스에서
+0

스택이 고정되어 데이터 한도에서 차감됩니다. 프로세스를 CPU %로 제한하기는 어렵지만 (해당 숫자의 구현이 다양하기 때문에) 특정 CPU 시간 (FreeBSD에서는 RLIMIT_CPU, 다른 * nix에서는 너무 높음)으로 제한하는 것은 쉽습니다. –

4

: - ulimit -d 유사 당신이 POSIX 시스템 V- 또는 BSD 파생 시스템에있는 경우 "ulimit를 -d 64M"

3

, 당신은 자원 RLIMIT_DATAsetrlimit()를 사용할 수 있습니다.

또한 RLIMIT_CPU 자원에서 살펴 - 당신이 세부 사항에 대한 확인 man setrlimit

(유사 ulimit -t에) 필요한 아마.

+0

RLIMIT_DATA doesn glibc로 작업한다 --- 더 많은 메모리를 할당하기 위해 간단히'mmap '으로 바꾼다. –

1

CPU의 경우, 우선 순위가 낮은 작업 (다른 작업보다 낮음)이 있습니다. 그런 다음 해당 작업의 실행 빈도를 볼 수 있으며 나머지 프로세스가 CPU를 너무 많이 사용하는지 알 수 있습니다. 이 방법은 다른 프로세스가 실행되는 동안 프로세스를 10 %로 제한하려는 경우에는 작동하지 않지만 50 % CPU가 비어 있는지 확인하려는 경우 제대로 작동합니다.

메모리 제한 때문에 malloc 위에 자신 만의 레이어를 구현하거나 어떤 식 으로든 OS를 활용할 수 있습니다. 유닉스 시스템에서 ulimit은 당신의 친구입니다. VxWorks에서 태스크 컨트롤 블록을 활용하여 애플리케이션이 얼마나 많은 메모리를 사용하는지 확인할 수있을 것입니다. 이미 그 기능이 없다면 말이죠. Windows에서 응용 프로그램이 64MB 이상인 경우 적어도 모니터를 설정하여보고 할 수 있습니다.

다른 질문은 : 응답으로 무엇을합니까? 응용 프로그램이 64MB를 초과하면 충돌이 발생합니까? 너 자신을 제한하는 데 도움이되는 안내서로 이것을 원하니? 이는 "강제적"접근 방식과 "모니터 및보고"접근 방식을 선택하는 것의 차이를 만들 수 있습니다.

관련 문제