Je programme en VC6++, mais j'ai encore certaines "lacunes" en
programmation.
J'aimerais notamment avoir des exemples de structures de donnees de type
pile ou file, qui me permettrait une gestion un peu plus dynamique de la
memoire, notamment au stade ou j'en suis je cree des tableaux de 100
"cases" alors qu'en general je n'en utilise qu'une dizaine de celles-ci.
Si vous aviez un site simple ou je pourrais trouver ca ce serait cool.
ceci dit, présenter les constructeurs avec placement à un débutant ne me parait pas un modèle de pédagogie :-)
Nous sommes d'accord. Point de salut en dehors des abstractions ;)
-- Luc Hermitte
Luc Hermitte
MALIS Pierre-Yves wrote in news::
Meme si le sujet est parti un peu dans tous les sens, je pense que je vais essayer de jeter un petit coup d'oeil, et non ce n'est pas pour "l'ecole", a mon stade on appelle ca la fac,
Même après la FAC on continue de dire l'école. Si si ;-)
mais je n'ai fais les piles qu'en ADA et c'etait beaucoup plus simple ( dans mes souvenirs en tout cas...)
Les abstractions en C++ sont dans la SL, donc pour les piles : std::stack<>. Après, ce n'est pas excessivement compliqué, c'est surtout la syntaxe qui change. Et si on veut être correct il y a divers petits détails supplémentaires à surveiller en C++ quand on veut programmer ces abstractions.
-- Luc Hermitte
MALIS Pierre-Yves <linfg176@cict.fr> wrote in
news:400689A1.11C1D981@cict.fr:
Meme si le sujet est parti un peu dans tous les sens, je pense que je
vais essayer de jeter un petit coup d'oeil, et non ce n'est pas pour
"l'ecole", a mon stade on appelle ca la fac,
Même après la FAC on continue de dire l'école. Si si ;-)
mais je n'ai fais les piles qu'en ADA et c'etait beaucoup plus simple
( dans mes souvenirs en tout cas...)
Les abstractions en C++ sont dans la SL, donc pour les piles :
std::stack<>.
Après, ce n'est pas excessivement compliqué, c'est surtout la syntaxe qui
change. Et si on veut être correct il y a divers petits détails
supplémentaires à surveiller en C++ quand on veut programmer ces
abstractions.
Meme si le sujet est parti un peu dans tous les sens, je pense que je vais essayer de jeter un petit coup d'oeil, et non ce n'est pas pour "l'ecole", a mon stade on appelle ca la fac,
Même après la FAC on continue de dire l'école. Si si ;-)
mais je n'ai fais les piles qu'en ADA et c'etait beaucoup plus simple ( dans mes souvenirs en tout cas...)
Les abstractions en C++ sont dans la SL, donc pour les piles : std::stack<>. Après, ce n'est pas excessivement compliqué, c'est surtout la syntaxe qui change. Et si on veut être correct il y a divers petits détails supplémentaires à surveiller en C++ quand on veut programmer ces abstractions.
-- Luc Hermitte
Thierry
Bonjour,
Arnaud Debaene a écrit :
ceci dit, présenter les constructeurs avec placement à
Qu'est ce que c'est que cette bete ?? J'en suis toujours a "on ne peut pas appeler un constructeur explicitement".
-- « Willy, j'ai mangé le chat. »
Bonjour,
Arnaud Debaene a écrit :
ceci dit, présenter les constructeurs avec placement à
Qu'est ce que c'est que cette bete ?? J'en suis toujours a "on ne peut pas
appeler un constructeur explicitement".
> ceci dit, présenter les constructeurs avec placement à
Qu'est ce que c'est que cette bete ?? J'en suis toujours a "on ne peut pas appeler un constructeur explicitement".
de votre point de vue non. mais en écrivant un operator new (qui n'en a pas vraiment la fonctionalité), oui.
Arnaud Debaene
Thierry wrote:
Bonjour,
Arnaud Debaene a écrit :
ceci dit, présenter les constructeurs avec placement à
Qu'est ce que c'est que cette bete ?? J'en suis toujours a "on ne peut pas appeler un constructeur explicitement".
class A { //plein de trucs };
//allocation avec le "placement-new" void* buffer = malloc(sizeof(A)); //on pourrait utiliser HeapAlloc, un memory mapped file ou n'importe quelle manière d'allouer un buffer. A* ptr_A = new (buffer) A; //création d'un objet A dans l'espace pointé par buffer
//utilisation de ptr_A
ptr_A->~A(); //appel explicite du destructeur free (buffer); //libération explicite du buffer.
Grosso-modo, le "placement-new" permet de dissocier les 2 opérations qui sont faites ensemble par un new "classique" : - allocation d'un buffer mémoire pour contenir l'objet. - création de l'objet dans et espace mémoire
...et bien entendu le contraire lors de la destruction.
Arnaud
Thierry wrote:
Bonjour,
Arnaud Debaene a écrit :
ceci dit, présenter les constructeurs avec placement à
Qu'est ce que c'est que cette bete ?? J'en suis toujours a "on ne
peut pas appeler un constructeur explicitement".
class A
{
//plein de trucs
};
//allocation avec le "placement-new"
void* buffer = malloc(sizeof(A)); //on pourrait utiliser HeapAlloc, un
memory mapped file ou n'importe quelle manière d'allouer un buffer.
A* ptr_A = new (buffer) A; //création d'un objet A dans l'espace pointé
par buffer
//utilisation de ptr_A
ptr_A->~A(); //appel explicite du destructeur
free (buffer); //libération explicite du buffer.
Grosso-modo, le "placement-new" permet de dissocier les 2 opérations qui
sont faites ensemble par un new "classique" :
- allocation d'un buffer mémoire pour contenir l'objet.
- création de l'objet dans et espace mémoire
...et bien entendu le contraire lors de la destruction.
ceci dit, présenter les constructeurs avec placement à
Qu'est ce que c'est que cette bete ?? J'en suis toujours a "on ne peut pas appeler un constructeur explicitement".
class A { //plein de trucs };
//allocation avec le "placement-new" void* buffer = malloc(sizeof(A)); //on pourrait utiliser HeapAlloc, un memory mapped file ou n'importe quelle manière d'allouer un buffer. A* ptr_A = new (buffer) A; //création d'un objet A dans l'espace pointé par buffer
//utilisation de ptr_A
ptr_A->~A(); //appel explicite du destructeur free (buffer); //libération explicite du buffer.
Grosso-modo, le "placement-new" permet de dissocier les 2 opérations qui sont faites ensemble par un new "classique" : - allocation d'un buffer mémoire pour contenir l'objet. - création de l'objet dans et espace mémoire
...et bien entendu le contraire lors de la destruction.
Arnaud
Christian
Bonjour
As tu des exemple où ça peut être vraiment utile ? On s'épargne le couple malloc/ free donc réutilisation rapide d'un espace mémoire je suppose ... ?
Grosso-modo, le "placement-new" permet de dissocier les 2 opérations qui sont faites ensemble par un new "classique" : - allocation d'un buffer mémoire pour contenir l'objet. - création de l'objet dans et espace mémoire
Bonjour
As tu des exemple où ça peut être vraiment utile ? On s'épargne le couple malloc/ free donc réutilisation rapide
d'un espace mémoire je suppose ... ?
Grosso-modo, le "placement-new" permet de dissocier les 2 opérations qui
sont faites ensemble par un new "classique" :
- allocation d'un buffer mémoire pour contenir l'objet.
- création de l'objet dans et espace mémoire
As tu des exemple où ça peut être vraiment utile ? On s'épargne le couple malloc/ free donc réutilisation rapide d'un espace mémoire je suppose ... ?
Grosso-modo, le "placement-new" permet de dissocier les 2 opérations qui sont faites ensemble par un new "classique" : - allocation d'un buffer mémoire pour contenir l'objet. - création de l'objet dans et espace mémoire
Ambassadeur Kosh
> As tu des exemple où ça peut être vraiment utile ? On s'épargne le couple
malloc/ free donc réutilisation rapide
d'un espace mémoire je suppose ... ?
dans le cas d'un vector. on alloue les données par paquets, mais on "construit" les objets un par un. parait il que l'allocateur a du mal de gerer des millions de miettes et qu'il en resulte un certain gachi (hitsoire de page d'allocation chsaipakoi). on peut aussi résoudre de cette maniere des problemes de fragmentation mémoire en réalisant son allocateur.
plein de choses de ce gout. et donc tu supposes juste.
> As tu des exemple où ça peut être vraiment utile ? On s'épargne le couple
malloc/ free donc réutilisation rapide
d'un espace mémoire je suppose ... ?
dans le cas d'un vector. on alloue les données par paquets, mais on
"construit" les objets un par un.
parait il que l'allocateur a du mal de gerer des millions de miettes et
qu'il en resulte un certain gachi (hitsoire de page d'allocation
chsaipakoi). on peut aussi résoudre de cette maniere des problemes de
fragmentation mémoire en réalisant son allocateur.
plein de choses de ce gout. et donc tu supposes juste.
> As tu des exemple où ça peut être vraiment utile ? On s'épargne le couple
malloc/ free donc réutilisation rapide
d'un espace mémoire je suppose ... ?
dans le cas d'un vector. on alloue les données par paquets, mais on "construit" les objets un par un. parait il que l'allocateur a du mal de gerer des millions de miettes et qu'il en resulte un certain gachi (hitsoire de page d'allocation chsaipakoi). on peut aussi résoudre de cette maniere des problemes de fragmentation mémoire en réalisant son allocateur.
plein de choses de ce gout. et donc tu supposes juste.
adebaene
"Christian" wrote in message news:<4032c1fd$0$28611$...
Bonjour
As tu des exemple où ça peut être vraiment utile ? On s'épargne le couple malloc/ free donc réutilisation rapide d'un espace mémoire je suppose ... ?
- Dans les conteneurs genre std::vector qui peuvent avoir une capacité supérieure à leur taille courante, on alloue un buffer pour X objets puis on créé / détruit des objets dans ce buffer selon les besoins.
- Pour créer un objet dans une zone mémoire particulière, comme un memory mapped file pour partager un objet entre plusieurs processus.
- Dans la programmation embarquée, pour créer un objet à l'emplacement mémoire du hardware que l'objet représente.
Arnaud
"Christian" <christnw-christnw-@free.fr> wrote in message news:<4032c1fd$0$28611$626a14ce@news.free.fr>...
Bonjour
As tu des exemple où ça peut être vraiment utile ? On s'épargne le couple malloc/ free donc réutilisation rapide
d'un espace mémoire je suppose ... ?
- Dans les conteneurs genre std::vector qui peuvent avoir une capacité
supérieure à leur taille courante, on alloue un buffer pour X objets
puis on créé / détruit des objets dans ce buffer selon les besoins.
- Pour créer un objet dans une zone mémoire particulière, comme un
memory mapped file pour partager un objet entre plusieurs processus.
- Dans la programmation embarquée, pour créer un objet à l'emplacement
mémoire du hardware que l'objet représente.
"Christian" wrote in message news:<4032c1fd$0$28611$...
Bonjour
As tu des exemple où ça peut être vraiment utile ? On s'épargne le couple malloc/ free donc réutilisation rapide d'un espace mémoire je suppose ... ?
- Dans les conteneurs genre std::vector qui peuvent avoir une capacité supérieure à leur taille courante, on alloue un buffer pour X objets puis on créé / détruit des objets dans ce buffer selon les besoins.
- Pour créer un objet dans une zone mémoire particulière, comme un memory mapped file pour partager un objet entre plusieurs processus.
- Dans la programmation embarquée, pour créer un objet à l'emplacement mémoire du hardware que l'objet représente.
Arnaud
Manuel Leclerc
Arnaud Debaene a écrit :
- Pour créer un objet dans une zone mémoire particulière, comme un memory mapped file pour partager un objet entre plusieurs processus.
Jésus Marie Joseph, on peut vraiment faire une chose pareille ? Et le code, il est où ?
Arnaud Debaene a écrit :
- Pour créer un objet dans une zone mémoire
particulière, comme un memory mapped file pour
partager un objet entre plusieurs processus.
Jésus Marie Joseph, on peut vraiment faire une
chose pareille ? Et le code, il est où ?
- Pour créer un objet dans une zone mémoire particulière, comme un memory mapped file pour partager un objet entre plusieurs processus.
Jésus Marie Joseph, on peut vraiment faire une chose pareille ? Et le code, il est où ?
Thierry
Bonjour,
Arnaud Debaene a écrit :
- Dans les conteneurs genre std::vector qui peuvent avoir une capacité supérieure à leur taille courante, on alloue un buffer pour X objets puis on créé / détruit des objets dans ce buffer selon les besoins.
- Pour créer un objet dans une zone mémoire particulière, comme un memory mapped file pour partager un objet entre plusieurs processus.
Ca marcherait aussi dans un data seg partagé de DLL ? Le pb que je vois c'est que c'est dans le new qu'est explicitement precisé où doit être creer l'objet. Y'a moyen de combiner le placement avec la surcharge de l'operateur new pour que tous les objets d'un module soient créés dans un zone mémoire précise ?
- Dans la programmation embarquée, pour créer un objet à l'emplacement mémoire du hardware que l'objet représente.
-- « Willy, j'ai mangé le chat. »
Bonjour,
Arnaud Debaene a écrit :
- Dans les conteneurs genre std::vector qui peuvent avoir une capacité
supérieure à leur taille courante, on alloue un buffer pour X objets
puis on créé / détruit des objets dans ce buffer selon les besoins.
- Pour créer un objet dans une zone mémoire particulière, comme un
memory mapped file pour partager un objet entre plusieurs processus.
Ca marcherait aussi dans un data seg partagé de DLL ?
Le pb que je vois c'est que c'est dans le new qu'est explicitement precisé
où doit être creer l'objet. Y'a moyen de combiner le placement avec la
surcharge de l'operateur new pour que tous les objets d'un module soient
créés dans un zone mémoire précise ?
- Dans la programmation embarquée, pour créer un objet à l'emplacement
mémoire du hardware que l'objet représente.
- Dans les conteneurs genre std::vector qui peuvent avoir une capacité supérieure à leur taille courante, on alloue un buffer pour X objets puis on créé / détruit des objets dans ce buffer selon les besoins.
- Pour créer un objet dans une zone mémoire particulière, comme un memory mapped file pour partager un objet entre plusieurs processus.
Ca marcherait aussi dans un data seg partagé de DLL ? Le pb que je vois c'est que c'est dans le new qu'est explicitement precisé où doit être creer l'objet. Y'a moyen de combiner le placement avec la surcharge de l'operateur new pour que tous les objets d'un module soient créés dans un zone mémoire précise ?
- Dans la programmation embarquée, pour créer un objet à l'emplacement mémoire du hardware que l'objet représente.