J’étais en train d’initialiser un tableau (unsigned short int) de taille 100000000 en C 4.3.2, ainsi que deux autres tableaux int de taille 1000000. Mais lors de la soumission sur le juge Online, l’erreur SIGSEGV était générée .
Par conséquent, j’ai décidé d’initialiser mon tableau de manière dynamic avec une valeur par défaut de 0, car l’ajout de valeur par boucle prend beaucoup de temps.
Ma question est de savoir comment initialiser le tableau dynamicment avec une valeur par défaut?
Vous pouvez utiliser void *calloc(size_t nmemb, size_t size);
fonction pour initialiser la mémoire avec 0
,
La fonction
calloc()
alloue de la mémoire à un tableau d’élémentsnmemb
de taille octets et renvoie un pointeur sur la mémoire allouée. La mémoire est mise àzero
. Sinmemb
ou size estnmemb
0
,calloc()
renvoieNULL
ou une valeur de pointeur unique pouvant ultérieurement être transmise àfree()
.
calloc(number of elements, sizeof(type));
ou vous pouvez également utiliser explicitement memset()
pour initialiser la mémoire allouée par l’appel de malloc()
.
Remarque: calloc()
n’est pas magique non plus – il utilisera également une boucle quelque part pour remplacer la poubelle par des zéros.
Voir aussi: Pourquoi malloc()
+ memset()
est plus lent que calloc()
?
Vous ne pouvez pas éliminer le temps d’initialisation, peu importe ce que vous faites. Le mieux que vous puissiez faire est d’essayer de l’ optimiser . 2 techniques me viennent à l’esprit:
Le déroulement sera probablement appliqué de toute façon en optimisant le compilateur.
Vous pouvez également essayer de déplacer la surcharge d’initialisation vers une section non critique. Par exemple, vous pouvez utiliser des variables statiques qui seront initialisées à zéro au démarrage du programme. Ou, au contraire, vous pouvez différer l’initialisation jusqu’à la première utilisation (initialisation différée).