essaie d'obtenir ma tête autour des axes suivants:Erreur de bus sur OSX - pthreads
Avoir un petit programme essaie de port OSX (intel) dont la fonction appelle DoWork() via pthread_create, dans la fonction, Je commence par la création d'un tableau de longs comme par exemple:
long myarray[DIMENSION]
sur Mac OS X, pour les valeurs suivantes de DIMENSION, j'obtiens ce qui suit:
0->65434 = fine 65435->67037 = SIGBUS 67037+ = SIGSEGV
Je suis totalement confus ici, je comprendre que SIGBUS est dû à des problèmes d'alignement de la mémoire en général, j'ai vérifié sizeof (long) et il semble être 8 sur cette plate-forme. Quelqu'un peut-il me diriger dans la bonne direction des documents que je devrais lire ici?
Voici la source:
#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);
}
Merci, cela a du sens, en utilisant getstacksize() On me dit que le thread a 524288 octets de pile, en supposant que long est 8 octets, 8 * 62435 vient juste en dessous (523480), j'imagine le reste est frais généraux d'une certaine sorte? – lochii
semble probable. Il y aura un bloc pthread en bas du thread et il y aura une petite surcharge de toutes les fonctions sur la callstack. – JosephH