Les fonctions pthread_mutex_lock et pthread_mutex_unlock appellent-elles des instructions de barrière de mémoire? Ou est-ce que les instructions de niveau inférieur telles que implicite de compare_and_swap ont des barrières de mémoire?
J’essaie de configurer un alias “gcc99” dans Windows PowerShell qui est égal à “gcc -std = C99 -pedantic -Wall”. L’idée est d’utiliser moins de frappes au clavier pour s’assurer que GCC s’exécute en mode c99. (J’ai fait de mon mieux pour adapter les instructions de l’article suivant à Windows PowerShell: Définition de l’indicateur std = […]
J’ai une question sur la gestion de la mémoire en C (et GCC 4.3.3 sous Debian GNU / Linux). Selon le livre de langage de programmation C de K & R (chap. 7.8.5), le fait de libérer un pointeur puis de le déréférencer est une erreur. Mais j’ai quelques doutes depuis que j’ai remarqué que […]
J’ai déclaré une structure et j’essaie de passer un tableau de ces structures (ainsi qu’un double tableau de doubles et un entier) dans une fonction. Je reçois un message “Le type de tableau a un type d’élément incomplet” de gcc lorsque je le comstack. Qu’est-ce que je me suis trompé dans la façon dont je […]
J’ai beaucoup de définitions de macro préprocesseur, comme ceci: #define FOO 1 #define BAR 2 #define BAZ 3 Dans l’application réelle, chaque définition correspond à une instruction dans une machine virtuelle interprète. Les macros ne sont pas non plus séquentielles dans la numérotation afin de laisser de la place pour les instructions futures; il peut […]
Dupliquer possible: pouvons-nous donner à la taille du tableau statique une variable Je définis un tableau dans l’un des fichiers enfants comme suit. static int arr[siz]; Ici siz est une variable globale disponible dans le fichier enfant. Mais le compilateur gcc produit l’erreur suivante: : : error : storage size of ‘arr’ isn’t constant Pourquoi […]
Je porte une application sur une plate-forme ARM en C, l’application s’exécute également sur un processeur x86 et doit être compatible avec les versions antérieures. J’ai maintenant quelques problèmes avec l’alignement variable. J’ai lu le manuel gcc pour __atsortingbute__((aligned(4),packed)) ce qui est dit car le début de la structure est aligné sur la limite de […]
Pour x64, je peux utiliser ceci: { uint64_t hi, lo; // hi,lo = 64bit x 64bit multiply of c[0] and b[0] __asm__(“mulq %3\n\t” : “=d” (hi), “=a” (lo) : “%a” (c[0]), “rm” (b[0]) : “cc” ); a[0] += hi; a[1] += lo; } Mais j’aimerais effectuer le même calcul de manière portable. Par exemple pour […]
J’écris un chercheur de nombres premiers. Mathématiquement, il est plus rapide de faire (au lieu de faire for (unsigned long i = 2; i < number/2; i++) il est beaucoup plus rapide et toujours aussi efficace à faire for (unsigned long i = 2; i < sqrt(number); i++) Mais ça ne marche pas. Le ci-dessous […]
Il semble y avoir 3 façons de dire à GCC de relier un symbole par un lien faible __atsortingbute__((weak_import)) __atsortingbute__((weak)) #pragma weak symbol_name Aucun de ces travaux pour moi: #pragma weak asdf extern void asdf(void) __atsortingbute__((weak_import, weak)); … { if(asdf != NULL) asdf(); } Je reçois toujours une erreur de lien comme celle-ci: Symboles non […]