我试图了解以下内容:
有一个小程序我试图移植到OSX(intel)通过pthread_create调用函数doWork(),在函数中,我首先创建一个像这样的长数组:
long myarray[DIMENSION]
在OSX上,对于以下DIMENSION值,我得到以下内容:
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);
}
} …Run Code Online (Sandbox Code Playgroud)