я пытаюсь разобраться в следующем:
Есть небольшая программа, пытающаяся портировать на OSX (intel), которая вызывает функцию doWork () через pthread_create, в функции я начинаю с созданиямассив long вроде такой:
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);
}
}
pthread_exit(NULL);
}