2013-04-25 3 views
3

어떻게하면 C에서 쓰레드가 사용하는 메모리를 줄일 수 있습니까? 스레드가 약 8 ~ 10MB의 메모리를 사용하지만이 메모리를 줄이는 방법이 있습니까?C의 쓰레드에 의한 메모리 할당

+2

합리적으로 생각하면 문제가되지 않습니다. CPU에는 몇 개의 코어가 있습니까? 얼마나 많은 스레드를 시작하려고합니까? 2000 개의 스레드를 시작하려는 경우 메모리 만 있으면 문제가 발생하지 않습니다. – Sebivor

+1

고려해야 할 또 다른 사항은 대부분의 시스템에서 스택은 페이지 덩어리 (대개 약 4KB)에 한 번에 하나씩 할당되어 자동으로 커집니다. 스레드 라이브러리가 스택에 X 양의 MB를 할당한다고해도 실제 물리적으로 사용되고 있음을 의미하지는 않습니다. 실험으로 : 사용 가능한 실제 RAM을 모두 할당 한 다음 잠자기하는 프로그램을 작성하십시오. 그것을 실행하고 실제 사용 된 메모리 (RSS, 주민 설정)를 확인하십시오. –

답변

6

예 스레드 스택의 크기를 설정할 수 있습니다.

pthread_attr_t attribute; 
pthread_t thread; 
pthread_attr_init(&attribute); 
pthread_attr_setstacksize(&attribute,size); // size may be defined by u as 1024,2048,etc 
pthread_create(&thread,&attribute,fun,0); 

.................................................. .....

void *fun(void *arg) 
{ 
     .... 
} 
2

이미 답변 했으므로 응용 프로그램에서 pthread 속성을 사용할 수 있습니다.

그러나 당신은 또한 ulimit 명령으로 현재 쉘에서 실행 된 모든 응용 프로그램에 대한 제한을 설정할 수 있습니다

  • ulimit -s을 : MiB 크기
  • 를 1로 스택을 제한 :
  • ulimit -s 1024 키브
  • 의 전류 제한을 보여