는 다음 주위에 내 머리를 얻으려고 노력하고 있어요 나는 그런처럼 긴 배열을 생성하여 시작합니다버스 오류의 pthreads
0->65434 = fine 65435->67037 = SIGBUS 67037+ = SIGSEGV
내가 여기 완전히 혼란 스러워요 :
OSX에long myarray[DIMENSION]
이 DIMENSION 다음과 같은 값을, 나는 다음과 같은 얻을 SIGBUS가 보통 메모리 정렬 문제로 인한 것임을 이해하고 sizeof (long)를 확인했으며이 플랫폼에서 8 인 것처럼 보입니다. 누군가 내가 여기서 읽어야 할 문서의 올바른 방향으로 나를 가리킬 수 있습니까?
#include pthread.h
#include stdio.h
#define NUM_THREADS 5
#define DIMENSION 12345
void *doStuff(void *threadid)
{
long array[DIMENSION];
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0; t lt NUM_THREADS; t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, doStuff, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
}
감사합니다. getstacksize()를 사용하면 스레드에 524288 바이트의 스택이 있다고 가정합니다. 길이는 8 바이트라고 가정하고 8 * 62435는 그 바로 아래 (523480)에옵니다. 나머지는 상상할 것입니다. 어떤 종류의 간접비인가? – lochii
소리가 들립니다. 스레드의 맨 아래에 pthread 블록이있을 것이고 콜 스택의 모든 함수에서 작은 오버 헤드가있을 것입니다. – JosephH