Et ? Je ne vois pas le rapport. Marc accuse GNU d'être une agence de
vaporwares, alors que le projet GNU est tout de même l'un de ceux qui
ont apporté le plus au monde du libre (et bon nombre d'outils GNU sont
utilisés aussi sur les BSD d'ailleurs (gcc, gdb, emacs, the gimp,
...))
Et ? Je ne vois pas le rapport. Marc accuse GNU d'être une agence de
vaporwares, alors que le projet GNU est tout de même l'un de ceux qui
ont apporté le plus au monde du libre (et bon nombre d'outils GNU sont
utilisés aussi sur les BSD d'ailleurs (gcc, gdb, emacs, the gimp,
...))
Et ? Je ne vois pas le rapport. Marc accuse GNU d'être une agence de
vaporwares, alors que le projet GNU est tout de même l'un de ceux qui
ont apporté le plus au monde du libre (et bon nombre d'outils GNU sont
utilisés aussi sur les BSD d'ailleurs (gcc, gdb, emacs, the gimp,
...))
Ce serait pas mal d'essayer d'éviter de donner de mauvaises habitudes en
conseillant l'utilisation de fonctions (vraiment) non-standards. Je sais
bien que ces fonctions sont pratiques mais vu qu'elles n'existent
souvent que sur une plateforme unique (Linux et GNU), ce n'est pas
l'idéal.
Lorsque les fonctions sont ddans une bibliothèque diffusé sous une
license libre, et que tu comptes diffuser le programme sous une
license compatibel, tu peux reprendre le code déjà fait, testé, validé
et optimisé de la libc GNU ou de la GLib, plutôt que de réinventer la
roue à chaque fois.
Juste un doigt de proselytisme. Il existe une licence libre (BSD) qui
se fonde sur des ideaux philosophiques differents de ceux de la GPL.
Oui, des idéaux de jemenfoutisme, de "oh bah qu'ils reprennent mon
code pour accroitre leur puissance commerciale afin de mieux
vérouiller l'informatique dans les brevets et du TCPA", très peu pour
moi, merci. Je ne comprends pas comment des auteurs de logiciel libre
peuvent trouver normal de laisser leur code se faire piller par des
gens qui déclarent officilement que le logiciel libre est un ennemi à
abattre.
Ce serait pas mal d'essayer d'éviter de donner de mauvaises habitudes en
conseillant l'utilisation de fonctions (vraiment) non-standards. Je sais
bien que ces fonctions sont pratiques mais vu qu'elles n'existent
souvent que sur une plateforme unique (Linux et GNU), ce n'est pas
l'idéal.
Lorsque les fonctions sont ddans une bibliothèque diffusé sous une
license libre, et que tu comptes diffuser le programme sous une
license compatibel, tu peux reprendre le code déjà fait, testé, validé
et optimisé de la libc GNU ou de la GLib, plutôt que de réinventer la
roue à chaque fois.
Juste un doigt de proselytisme. Il existe une licence libre (BSD) qui
se fonde sur des ideaux philosophiques differents de ceux de la GPL.
Oui, des idéaux de jemenfoutisme, de "oh bah qu'ils reprennent mon
code pour accroitre leur puissance commerciale afin de mieux
vérouiller l'informatique dans les brevets et du TCPA", très peu pour
moi, merci. Je ne comprends pas comment des auteurs de logiciel libre
peuvent trouver normal de laisser leur code se faire piller par des
gens qui déclarent officilement que le logiciel libre est un ennemi à
abattre.
Ce serait pas mal d'essayer d'éviter de donner de mauvaises habitudes en
conseillant l'utilisation de fonctions (vraiment) non-standards. Je sais
bien que ces fonctions sont pratiques mais vu qu'elles n'existent
souvent que sur une plateforme unique (Linux et GNU), ce n'est pas
l'idéal.
Lorsque les fonctions sont ddans une bibliothèque diffusé sous une
license libre, et que tu comptes diffuser le programme sous une
license compatibel, tu peux reprendre le code déjà fait, testé, validé
et optimisé de la libc GNU ou de la GLib, plutôt que de réinventer la
roue à chaque fois.
Juste un doigt de proselytisme. Il existe une licence libre (BSD) qui
se fonde sur des ideaux philosophiques differents de ceux de la GPL.
Oui, des idéaux de jemenfoutisme, de "oh bah qu'ils reprennent mon
code pour accroitre leur puissance commerciale afin de mieux
vérouiller l'informatique dans les brevets et du TCPA", très peu pour
moi, merci. Je ne comprends pas comment des auteurs de logiciel libre
peuvent trouver normal de laisser leur code se faire piller par des
gens qui déclarent officilement que le logiciel libre est un ennemi à
abattre.
Par exemple, en embarqué, ils ne travaillent que sur des données
allouées statiquement, devine pourquoi ? (des indices ont été
données dans la première partie de ce paragraphe).
Parce qu'ils n'ont pas forcément d'implémentation de malloc ? ou
d'implémentation efficace de malloc ? Avoir un malloc efficace, ça
demande une infrastructure assez complexe. De plus, malloc n'est pas
déterliniste en temps d'exécution (si unb appel moyen à malloc est
assez rapide, certains appels à malloc peuvent être long). Mais bon,
on parle d'un cas très particulier là.
Par exemple, en embarqué, ils ne travaillent que sur des données
allouées statiquement, devine pourquoi ? (des indices ont été
données dans la première partie de ce paragraphe).
Parce qu'ils n'ont pas forcément d'implémentation de malloc ? ou
d'implémentation efficace de malloc ? Avoir un malloc efficace, ça
demande une infrastructure assez complexe. De plus, malloc n'est pas
déterliniste en temps d'exécution (si unb appel moyen à malloc est
assez rapide, certains appels à malloc peuvent être long). Mais bon,
on parle d'un cas très particulier là.
Par exemple, en embarqué, ils ne travaillent que sur des données
allouées statiquement, devine pourquoi ? (des indices ont été
données dans la première partie de ce paragraphe).
Parce qu'ils n'ont pas forcément d'implémentation de malloc ? ou
d'implémentation efficace de malloc ? Avoir un malloc efficace, ça
demande une infrastructure assez complexe. De plus, malloc n'est pas
déterliniste en temps d'exécution (si unb appel moyen à malloc est
assez rapide, certains appels à malloc peuvent être long). Mais bon,
on parle d'un cas très particulier là.
je travaille sur microcontrôleurs et je peux te dire pourquoi on
n'utilise pas malloc dans nos projets.
La raison est surtout une raison de sécurité : dans l'embarqué,
l'ennemi n'est pas forcément le hackeur (le logiciel peut tourner de
façon isolé), mais le programmeur (soi-même).
Un buffer sur pile est TOUJOURS désalloué quand on sort d'une
fonction, alors qu'un malloc, si aucun free n'est fait, constitue une
fuite de mémoire qui finit par être préjudiciable, et là, personne
pour relancer la machine (on met quand même toujours en place des
dispositifs de sécurité).
Enfin, le malloc, en tant que standard C, peut être générateur de
"gruyère" : à force d'allocation et de libération de mémoire on peut
se retrouver avec au total assez de mémoire pour allouer une donnée
sans avoir assez de mémoire contiguë pour le faire. Le système de
gestion de la mémoire ne peut pas "tasser" la mémoire utilisée pour
libérer un espace libre plus grand car il ne connaît pas l'adresse des
pointeurs sur les zones mémoire qu'il déplacerait.
je travaille sur microcontrôleurs et je peux te dire pourquoi on
n'utilise pas malloc dans nos projets.
La raison est surtout une raison de sécurité : dans l'embarqué,
l'ennemi n'est pas forcément le hackeur (le logiciel peut tourner de
façon isolé), mais le programmeur (soi-même).
Un buffer sur pile est TOUJOURS désalloué quand on sort d'une
fonction, alors qu'un malloc, si aucun free n'est fait, constitue une
fuite de mémoire qui finit par être préjudiciable, et là, personne
pour relancer la machine (on met quand même toujours en place des
dispositifs de sécurité).
Enfin, le malloc, en tant que standard C, peut être générateur de
"gruyère" : à force d'allocation et de libération de mémoire on peut
se retrouver avec au total assez de mémoire pour allouer une donnée
sans avoir assez de mémoire contiguë pour le faire. Le système de
gestion de la mémoire ne peut pas "tasser" la mémoire utilisée pour
libérer un espace libre plus grand car il ne connaît pas l'adresse des
pointeurs sur les zones mémoire qu'il déplacerait.
je travaille sur microcontrôleurs et je peux te dire pourquoi on
n'utilise pas malloc dans nos projets.
La raison est surtout une raison de sécurité : dans l'embarqué,
l'ennemi n'est pas forcément le hackeur (le logiciel peut tourner de
façon isolé), mais le programmeur (soi-même).
Un buffer sur pile est TOUJOURS désalloué quand on sort d'une
fonction, alors qu'un malloc, si aucun free n'est fait, constitue une
fuite de mémoire qui finit par être préjudiciable, et là, personne
pour relancer la machine (on met quand même toujours en place des
dispositifs de sécurité).
Enfin, le malloc, en tant que standard C, peut être générateur de
"gruyère" : à force d'allocation et de libération de mémoire on peut
se retrouver avec au total assez de mémoire pour allouer une donnée
sans avoir assez de mémoire contiguë pour le faire. Le système de
gestion de la mémoire ne peut pas "tasser" la mémoire utilisée pour
libérer un espace libre plus grand car il ne connaît pas l'adresse des
pointeurs sur les zones mémoire qu'il déplacerait.
Enfin, le malloc, en tant que standard C, peut être générateur de
"gruyère" : à force d'allocation et de libération de mémoire on peut
se retrouver avec au total assez de mémoire pour allouer une donnée
sans avoir assez de mémoire contiguë pour le faire. Le système de
gestion de la mémoire ne peut pas "tasser" la mémoire utilisée pour
libérer un espace libre plus grand car il ne connaît pas l'adresse des
pointeurs sur les zones mémoire qu'il déplacerait.
Ça dépend de l'implémentation de malloc et du système. Avec un malloc
comme le malloc GNU sous Unix, il utilise automatiquement mmap() pour
allouer de grosses mémoires, et grace à la magie de la pagination, il
n'y a aucun problème de fragmentation avec mmap().
Enfin, le malloc, en tant que standard C, peut être générateur de
"gruyère" : à force d'allocation et de libération de mémoire on peut
se retrouver avec au total assez de mémoire pour allouer une donnée
sans avoir assez de mémoire contiguë pour le faire. Le système de
gestion de la mémoire ne peut pas "tasser" la mémoire utilisée pour
libérer un espace libre plus grand car il ne connaît pas l'adresse des
pointeurs sur les zones mémoire qu'il déplacerait.
Ça dépend de l'implémentation de malloc et du système. Avec un malloc
comme le malloc GNU sous Unix, il utilise automatiquement mmap() pour
allouer de grosses mémoires, et grace à la magie de la pagination, il
n'y a aucun problème de fragmentation avec mmap().
Enfin, le malloc, en tant que standard C, peut être générateur de
"gruyère" : à force d'allocation et de libération de mémoire on peut
se retrouver avec au total assez de mémoire pour allouer une donnée
sans avoir assez de mémoire contiguë pour le faire. Le système de
gestion de la mémoire ne peut pas "tasser" la mémoire utilisée pour
libérer un espace libre plus grand car il ne connaît pas l'adresse des
pointeurs sur les zones mémoire qu'il déplacerait.
Ça dépend de l'implémentation de malloc et du système. Avec un malloc
comme le malloc GNU sous Unix, il utilise automatiquement mmap() pour
allouer de grosses mémoires, et grace à la magie de la pagination, il
n'y a aucun problème de fragmentation avec mmap().
je travaille sur microcontrôleurs et je peux te dire pourquoi on
n'utilise pas malloc dans nos projets.
La raison est surtout une raison de sécurité : dans l'embarqué,
l'ennemi n'est pas forcément le hackeur (le logiciel peut tourner de
façon isolé), mais le programmeur (soi-même).
C'est vrai
Un buffer sur pile est TOUJOURS désalloué quand on sort d'une
fonction, alors qu'un malloc, si aucun free n'est fait, constitue une
fuite de mémoire qui finit par être préjudiciable, et là, personne
pour relancer la machine (on met quand même toujours en place des
dispositifs de sécurité).
En effet, c'est un problème du malloc
Enfin, le malloc, en tant que standard C, peut être générateur de
"gruyère" : à force d'allocation et de libération de mémoire on peut
se retrouver avec au total assez de mémoire pour allouer une donnée
sans avoir assez de mémoire contiguë pour le faire. Le système de
gestion de la mémoire ne peut pas "tasser" la mémoire utilisée pour
libérer un espace libre plus grand car il ne connaît pas l'adresse des
pointeurs sur les zones mémoire qu'il déplacerait.
Ça dépend de l'implémentation de malloc et du système. Avec un malloc
comme le malloc GNU sous Unix, il utilise automatiquement mmap() pour
allouer de grosses mémoires, et grace à la magie de la pagination, il
n'y a aucun problème de fragmentation avec mmap().
Le problème est toujours présent pour les petites quantités de mémoire,
mais en pratique se pose beaucoup moins.
Maintenant, sur l'embarqué (où la mémoire disponible est faible, et où
il n'y a souvent pas de MMU), ça doit en effet être un vrai problème.
je travaille sur microcontrôleurs et je peux te dire pourquoi on
n'utilise pas malloc dans nos projets.
La raison est surtout une raison de sécurité : dans l'embarqué,
l'ennemi n'est pas forcément le hackeur (le logiciel peut tourner de
façon isolé), mais le programmeur (soi-même).
C'est vrai
Un buffer sur pile est TOUJOURS désalloué quand on sort d'une
fonction, alors qu'un malloc, si aucun free n'est fait, constitue une
fuite de mémoire qui finit par être préjudiciable, et là, personne
pour relancer la machine (on met quand même toujours en place des
dispositifs de sécurité).
En effet, c'est un problème du malloc
Enfin, le malloc, en tant que standard C, peut être générateur de
"gruyère" : à force d'allocation et de libération de mémoire on peut
se retrouver avec au total assez de mémoire pour allouer une donnée
sans avoir assez de mémoire contiguë pour le faire. Le système de
gestion de la mémoire ne peut pas "tasser" la mémoire utilisée pour
libérer un espace libre plus grand car il ne connaît pas l'adresse des
pointeurs sur les zones mémoire qu'il déplacerait.
Ça dépend de l'implémentation de malloc et du système. Avec un malloc
comme le malloc GNU sous Unix, il utilise automatiquement mmap() pour
allouer de grosses mémoires, et grace à la magie de la pagination, il
n'y a aucun problème de fragmentation avec mmap().
Le problème est toujours présent pour les petites quantités de mémoire,
mais en pratique se pose beaucoup moins.
Maintenant, sur l'embarqué (où la mémoire disponible est faible, et où
il n'y a souvent pas de MMU), ça doit en effet être un vrai problème.
je travaille sur microcontrôleurs et je peux te dire pourquoi on
n'utilise pas malloc dans nos projets.
La raison est surtout une raison de sécurité : dans l'embarqué,
l'ennemi n'est pas forcément le hackeur (le logiciel peut tourner de
façon isolé), mais le programmeur (soi-même).
C'est vrai
Un buffer sur pile est TOUJOURS désalloué quand on sort d'une
fonction, alors qu'un malloc, si aucun free n'est fait, constitue une
fuite de mémoire qui finit par être préjudiciable, et là, personne
pour relancer la machine (on met quand même toujours en place des
dispositifs de sécurité).
En effet, c'est un problème du malloc
Enfin, le malloc, en tant que standard C, peut être générateur de
"gruyère" : à force d'allocation et de libération de mémoire on peut
se retrouver avec au total assez de mémoire pour allouer une donnée
sans avoir assez de mémoire contiguë pour le faire. Le système de
gestion de la mémoire ne peut pas "tasser" la mémoire utilisée pour
libérer un espace libre plus grand car il ne connaît pas l'adresse des
pointeurs sur les zones mémoire qu'il déplacerait.
Ça dépend de l'implémentation de malloc et du système. Avec un malloc
comme le malloc GNU sous Unix, il utilise automatiquement mmap() pour
allouer de grosses mémoires, et grace à la magie de la pagination, il
n'y a aucun problème de fragmentation avec mmap().
Le problème est toujours présent pour les petites quantités de mémoire,
mais en pratique se pose beaucoup moins.
Maintenant, sur l'embarqué (où la mémoire disponible est faible, et où
il n'y a souvent pas de MMU), ça doit en effet être un vrai problème.
Pascal
http://je_nai_pas_dadresse.fr
GSM: ça sert à rien
ICQ: moi aussi, I see you
Et fingerprint dans le c...
Membre: je suis un membre de ma famille, c'est le plus important :)
Pascal
http://je_nai_pas_dadresse.fr
GSM: ça sert à rien
ICQ: moi aussi, I see you
Et fingerprint dans le c...
Membre: je suis un membre de ma famille, c'est le plus important :)
Pascal
http://je_nai_pas_dadresse.fr
GSM: ça sert à rien
ICQ: moi aussi, I see you
Et fingerprint dans le c...
Membre: je suis un membre de ma famille, c'est le plus important :)
Enfin, le malloc, en tant que standard C, peut être générateur de
"gruyère" : à force d'allocation et de libération de mémoire on peut
se retrouver avec au total assez de mémoire pour allouer une donnée
sans avoir assez de mémoire contiguë pour le faire. Le système de
gestion de la mémoire ne peut pas "tasser" la mémoire utilisée pour
libérer un espace libre plus grand car il ne connaît pas l'adresse des
pointeurs sur les zones mémoire qu'il déplacerait.
Ça dépend de l'implémentation de malloc et du système. Avec un malloc
comme le malloc GNU sous Unix, il utilise automatiquement mmap() pour
allouer de grosses mémoires, et grace à la magie de la pagination, il
n'y a aucun problème de fragmentation avec mmap().
Le gruyère dont il parlait ne concernait pas plus les grosses
quantités de mémoire que les petites. Je ne vois d'ailleurs pas en
quoi mmap() aide plus ...
Bref, que ce soit avec l'implémentation GNU ou autre (j'ai
l'impression que tu essaies un peu d'endoctriner tout le monde avec
GNU),
je pense qu'avec des allocations donné dans l'exemple suivant, ça
devient vite problématique. On a une perte de 33% de mémoire avec
l'implémentation GNU en question (glibc 2.3.2 de chez Debian).
En conclusion, on ne fait pas la publicité pour un produit sur
des qualités qu'il n'a pas, car les gens s'en apercoivent très vite
en vérifiant.
Enfin, le malloc, en tant que standard C, peut être générateur de
"gruyère" : à force d'allocation et de libération de mémoire on peut
se retrouver avec au total assez de mémoire pour allouer une donnée
sans avoir assez de mémoire contiguë pour le faire. Le système de
gestion de la mémoire ne peut pas "tasser" la mémoire utilisée pour
libérer un espace libre plus grand car il ne connaît pas l'adresse des
pointeurs sur les zones mémoire qu'il déplacerait.
Ça dépend de l'implémentation de malloc et du système. Avec un malloc
comme le malloc GNU sous Unix, il utilise automatiquement mmap() pour
allouer de grosses mémoires, et grace à la magie de la pagination, il
n'y a aucun problème de fragmentation avec mmap().
Le gruyère dont il parlait ne concernait pas plus les grosses
quantités de mémoire que les petites. Je ne vois d'ailleurs pas en
quoi mmap() aide plus ...
Bref, que ce soit avec l'implémentation GNU ou autre (j'ai
l'impression que tu essaies un peu d'endoctriner tout le monde avec
GNU),
je pense qu'avec des allocations donné dans l'exemple suivant, ça
devient vite problématique. On a une perte de 33% de mémoire avec
l'implémentation GNU en question (glibc 2.3.2 de chez Debian).
En conclusion, on ne fait pas la publicité pour un produit sur
des qualités qu'il n'a pas, car les gens s'en apercoivent très vite
en vérifiant.
Enfin, le malloc, en tant que standard C, peut être générateur de
"gruyère" : à force d'allocation et de libération de mémoire on peut
se retrouver avec au total assez de mémoire pour allouer une donnée
sans avoir assez de mémoire contiguë pour le faire. Le système de
gestion de la mémoire ne peut pas "tasser" la mémoire utilisée pour
libérer un espace libre plus grand car il ne connaît pas l'adresse des
pointeurs sur les zones mémoire qu'il déplacerait.
Ça dépend de l'implémentation de malloc et du système. Avec un malloc
comme le malloc GNU sous Unix, il utilise automatiquement mmap() pour
allouer de grosses mémoires, et grace à la magie de la pagination, il
n'y a aucun problème de fragmentation avec mmap().
Le gruyère dont il parlait ne concernait pas plus les grosses
quantités de mémoire que les petites. Je ne vois d'ailleurs pas en
quoi mmap() aide plus ...
Bref, que ce soit avec l'implémentation GNU ou autre (j'ai
l'impression que tu essaies un peu d'endoctriner tout le monde avec
GNU),
je pense qu'avec des allocations donné dans l'exemple suivant, ça
devient vite problématique. On a une perte de 33% de mémoire avec
l'implémentation GNU en question (glibc 2.3.2 de chez Debian).
En conclusion, on ne fait pas la publicité pour un produit sur
des qualités qu'il n'a pas, car les gens s'en apercoivent très vite
en vérifiant.