1

J'ai remarqué que quand on fait une affectation de structure, du genre :
structure_t truc = *machin;
(où structure_t est un type complexe), gcc utilise une fonction appelée bcopy (fonction interne ?)
J'ai aussi remarqué qu'en remplaçant par :
structure_t truc;
memcpy (&truc, machin, sizeof (structure_t));

on gagnait de la place... mais est-ce que ça a des inconvénients ? (à part celui d'être moins lisible)
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

2

bcopy est la fonction appellee par gcc pour faire des copies par blocs.
C'est a dire que des qu'il veut faire une copie de x octets de src vers dest, il appelle cette fonction.

Cette fonction est incluse dans tigcclib.a, et elle fait un appel a memcpy.

Cette fonction est buggue (Elle supporte pas les copies de plus de 65536 octets, mais ca gene absolument pas gcc de l'appeller avec 65537%65536=1 octets...) et c'est juste un wrapper de memcpy (Implantation de tigcclib.a)

D'ailleurs si on ne redefinit pas memcpy comme une macro, c'est bcopy qui est utilise.

On en a discute longuement avecKevin. On est tombe d'accord qu'il faudrait reecrire le code de block copy de tigcc.

3

D'accord. Donc en attendant il vaut mieux toujours appeler memcpy soi-même.
avatar
« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

4

De toutes façons je ne vois pas qui utilise une structure de plus de 64 k... (à moins de faire un truc Pedrom-only)

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

5

Les sections BSS des programmes kernels (et _nostub) peuvent etre > 64K sans aucun probleme. embarrassed

6

Mais tu ne les représente jamais par une structure fixe. Et de toutes façons sous TIOS ce n'est pas possible sauf en séparant, auquel cas ce n'est plus contigu, donc on ne peut pas utiliser une seule structure dans ce cas.

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

7

De toute facon, ce n'est que la face emerge de l'iceberg.

8

mhu? Ca n'explique pas qu'on a pas besoin d'assignations de structures > 64k...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

9

J'en ai besoin, et gcc ne verifie meme pas si les arguments sont corrects. Et y'a d'autres problemes.

10

Je ne comprends pas. Si tu veux utiliser la copie de structure built-in, la taille de ta structure est forcément fixe roll Alors quelle est la taille précise de ta structure? gni

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

11

80K gni. Meme si c'est fixe, ca gene pas gcc de ne copier qu'un petit bout... Mais je vais m'y prendre autrement. J'ai quand meme lutte pour comprendre d'ou venait l'erreur.

12

Mais tu l'utilises sur une structure fixe ou c'est juste que tu n'as pas inclus les headers et que tu utilises memcpy???

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

13

Lis un peu mieux.

14

Ce que je ne comprends pas, c'est que tu fais allouer ta section de BSS (si c ça dont tu parles) directement par ton prog C. Tu essayes de convertir tes progs en nostub??? Parce que sinon, je ne vois pas pourquoi ce n'est pas le kernel qui le fait. Et si c le kernel qui le fqit, il n'utilise pas bcopy. Tu peux détailler please?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

15

struct machin { unsigned long x[20000];}
struct machin a,b;

int main()
{
 /* ... */
 a=b;
}


Satisfait ?

16

Ah OK. Mais c'est tellement bourrin que, comme je l'ai dit dans ./4, ça ne marche que sous PedROM (et ça ne marchera jamais ailleurs). En plus, il faut impérativement avoir plus de 128 ko de RAM libre pour ça (64k x 2)...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

17

Oui et oui. Je vois pas ce que ca a d'extraordinaire.

18

Bah c'est pas vraiment courant ce genre de programme gni En plus il a besoin des 80 k d'un coup, y a pas intérêt à ce qu'il y ait des handles lockés...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

19

Ben moi je me fais des allocs de 200Kb sans me poser de questions tongue

20

smile

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)