2
我试图让我的头围绕以下几个:总线错误 - 并行线程
有一个小程序,我试图移植到OSX(英特尔),它调用函数的doWork()通过在pthread_create ,在功能,我长首先创建数组像这样:
long myarray[DIMENSION]
在OSX,为维度的下列值,我得到如下:
0->65434 = fine 65435->67037 = SIGBUS 67037+ = SIGSEGV
我完全糊涂了这里,我理解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 2010-07-25 14:02:00
。线程底部会有一个pthread块,并且callstack上的任何函数都会有小的开销。 – JosephH 2010-07-25 14:48:15