Articles of gcc

Pthread_mutex_lock contient-il une instruction de barrière de mémoire?

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?

Définition d’un alias pour GCC dans Windows PowerShell

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 = […]

Pourquoi ai-je des résultats différents lorsque je déréférence un pointeur après l’avoir libéré?

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 […]

GCC: le type de tableau a un type d’élément incomplet

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 […]

Inverser facilement une collection de macros de préprocesseur C

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 […]

Pourquoi la taille d’un tableau statique ne peut-elle pas être modifiée?

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 […]

alignement de la mémoire dans les structures gcc

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 […]

Comment puis-je multiplier des opérandes 64 bits et obtenir un résultat 128 bits de manière portable?

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 […]

C Échec de la compilation: impossible de trouver les fonctions math.h

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 […]

Comment faire en sorte que les liens faibles fonctionnent avec GCC?

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 […]