작은 배열 (~ 4096 Byte)을 정렬하고 출력 파일에 쓰는 두 개의 스레드를 실행해야하는 간단한 프로그램을 작성했습니다. 입력 데이터는 하나의 큰 파일 (~ 4Gb)에 들어 있습니다. 컴퓨터의 메모리는 128MB입니다. 난 그냥 빈 메인 함수를 실행 14MB의 메모리를 사용하는 것으로 나타났습니다. 빈 함수 응용 프로그램으로 std :: thread를 실행하면 스레드 당 ~ 8MB가 사용되기 시작합니다. 하지만 동적 메모리 할당 프로그램을 하나만 만들면 스레드 당 약 64MB가 사용되기 시작합니다. 나는 너무 많은 기억을 쓸 수있는 것이 무엇인지 이해하지 못한다. 이 크기를 어떻게 제어 할 수 있습니까? 그리고 일부 시스템 기본 할당을 최소화하기 위해 동적 메모리를 할당하는 방법은 무엇입니까?빈 함수를 사용하여 std :: thread를 실행하는 데 많은 메모리가 필요합니다.
- 시스템 : 우분투 14.04.3
- 컴파일러 : GCC 4.8.4
컴파일러 옵션 : '-std = C++ 11 -03 -pthread'
이것은 코드 예제입니다.
void dummy(void) { std::vector<unsigned int> g(1); int i = 0; while(i<500000000) { ++i; } } int main(void) { std::thread t1(&dummy); std::thread t2(&dummy); std::thread t3(&dummy); t1.join(); t2.join(); t3.join(); return 0; }
다른 할당자를 사용해보십시오. jemalloc, tcmalloc. –
프로그램에서 사용한 메모리 양을 어떻게 결정 했습니까? –
나는 귀하의 조치를 신뢰하지 않습니다. 어떻게 메모리 사용량을 찾았습니까? – SergeyA