[gull] Subtilité de C n° 2 : type de retour de malloc

Leopoldo Ghielmetti leopoldo.ghielmetti at a3.epfl.ch
Fri Apr 4 15:33:20 CEST 2008


On Fri, 2008-04-04 at 15:18 +0200, Marc Mongenet wrote:
> Le 04/04/08, Leopoldo Ghielmetti<leopoldo.ghielmetti at a3.epfl.ch> a écrit :
> >
> > Donc il semblerait que peu importe s'il s'agit d'une architecture 32b ou
> >  64b, les deux codes compilent correctement. Du moins avec le compilateur
> >  gcc 4.1.2 sur architecture intel.
> >
> 
> Par curiosité, pourrais-tu essayer avec l'option -fno-builtin ?

Oui, et au lieu de faire un simple make toto je pense que je vais aussi
définir un CFLAGS avec un beau -m64 sinon j'ai beau être sur un Core 2
Duo, le compilateur gardera la compatibilité 32b. :-)

> En effet, comme on voit avec GCC 4, le compilateur connait
> en interne (donc même sans include !) les déclarations
> standards des fonctions standards comme malloc et printf :
> 
> toto.c:3: warning: incompatible implicit declaration of built-in
> function 'malloc'
> 
> Et on voit qu'il se plaint que les types sont incompatibles entre
> la déclaration de malloc built-in (void *malloc()) et celle qu'il
> déduit implicitement du source (int malloc()).
> 
> Tu as bien fait d'utiliser le pointeur, c'est effectivement à ce
> moment que je m'attend à un crash possible, pas au retour
> de malloc. Cela dit, si le compilateur ne lit que 32 bits (un int)
> au lieu de 64 (un void*) de la valeur retournée par malloc, mais
> que l'adresse tient sur 32 bits (comme 0x501010 dans ton
> exemple), peut-être que ça marchera tant que l'allocation ne
> dépasse pas les 4 Go.

Effectivement c'est ce que je pensais avant de comprendre que j'aivais
oublié d'habiliter l'extension 64b. Je referais les tests ce week-end.

ciao, Leo




More information about the gull mailing list