C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Réserver un espace mémoire d'une taille déterminé

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Alexandre
Guest





PostPosted: Thu Jan 27, 2005 6:05 pm    Post subject: Re: Réserver un espace mémoire d'une taille déterminé Reply with quote




"Pascal" <pascal (AT) spam (DOT) org> a écrit dans le message de news:
41f92520$0$4765$626a14ce (AT) news (DOT) free.fr...
Quote:
Bonjour,

Je dois programmer le stockage en mémoire persistante (donc un fichier)
d'une page. Une page est un espace mémoire *vive* de taille paramétrable
(mettons 512 octets). Il faut donc que j'alloue 512 octets, et que
j'écrives ces 512 octets dans un fichier.

Comment faire? Sachant qu'il faudra que je puisse travailler bit à bit sur
cette structure.
--
Pascal

bonjour,
tu peux utiliser std::malloc, qui renvoie un void *
void *ptr = std::malloc(512); // allocation de 512 octets
// on se sert de la structure
std::free(ptr); // on libere

pour travailler bit à bit c'est moins simple, puisqu'à priori on ne peut
accéder qu'octet par octet à la mémoire. Néanmoins, un bitset (une sorte de
structure C) peut convenir, par exemple :
struct OCTET
{
int bit0:1;
int bit1:1;
int bit2:1;
....
int bit7:1;
};

cette structure doit tenir sur un seul octet (attention à d'éventuels
alignements, qu'il faudra désactivement, voir suivant le compilo) et peut
être utilisée, à ce moment plutôt qu'un malloc tu peux faire :

OCTET Page[512];

ou si tu préfères allouer sur le tas et pas sur la pile
OCTET* Page=new OCTET[512];
....
delete[] Page;

et pour s'en servir :
Page[5].bit3 = 1; // passes le 3e bit de la 5e valeur de la page à 1...



Back to top
Frederic Py
Guest





PostPosted: Thu Jan 27, 2005 8:46 pm    Post subject: Re: Réserver un espace mémoire d'une taille déterminé Reply with quote



On 2005-01-27 19:05:17 +0100, "Alexandre" <alex.g (AT) netcourrier (DOT) com> said:

Quote:

"Pascal" <pascal (AT) spam (DOT) org> a écrit dans le message de news:
41f92520$0$4765$626a14ce (AT) news (DOT) free.fr...
Bonjour,

Je dois programmer le stockage en mémoire persistante (donc un fichier)
d'une page. Une page est un espace mémoire *vive* de taille
paramétrable (mettons 512 octets). Il faut donc que j'alloue 512
octets, et que j'écrives ces 512 octets dans un fichier.

Comment faire? Sachant qu'il faudra que je puisse travailler bit à bit
sur cette structure.
--
Pascal
pour travailler bit à bit c'est moins simple, puisqu'à priori on ne
peut accéder qu'octet par octet à la mémoire. Néanmoins, un bitset (une
sorte de structure C) peut convenir, par exemple :
struct OCTET
{
int bit0:1;
int bit1:1;
int bit2:1;
...
int bit7:1;
};

cette structure doit tenir sur un seul octet (attention à d'éventuels
alignements, qu'il faudra désactivement, voir suivant le compilo) et
peut être utilisée, à ce moment plutôt qu'un malloc tu peux faire :

A partir de là pourquoi ne pas utiliser std::bitset
(http://www.sgi.com/tech/stl/bitset.html)

#include <bitset>

typedef std::bitset<512*8> mem_page;

Quote:

OCTET Page[512];

mem_page Page;

Quote:

ou si tu préfères allouer sur le tas et pas sur la pile
OCTET* Page=new OCTET[512];

mem_page *Page = new mem_page;

Quote:
...
delete[] Page;

delete Page;

Quote:

et pour s'en servir :
Page[5].bit3 = 1; // passes le 3e bit de la 5e valeur de la page à 1...

page[5*8+3] = 1; // passes le 4e bit de la 6e valeur de la page (ou 44e
bit a 1)

Au passage j'ai corrigé ton commentaire an C/C++ l'élément n esdt le n+1éme ;)

--
Fred


Back to top
Frederic Py
Guest





PostPosted: Thu Jan 27, 2005 9:48 pm    Post subject: Re: Réserver un espace mémoire d'une taille déterminé Reply with quote



On 2005-01-27 21:46:51 +0100, Frederic Py <fredpy (AT) SPAM (DOT) free.fr> said:
[...]

Quote:

A partir de là pourquoi ne pas utiliser std::bitset
(http://www.sgi.com/tech/stl/bitset.html)
#include <bitset

typedef std::bitset<512*8> mem_page;

A la reflection prendre un bitset de taille trop grande peut poser
quelques problèmes pour ton cas mais l'idée gloable est là et à partir
du lien et de la description de cette classe et des "related classes"
tu doit pouvoir trouver ton bonheur à moindre coût de développement ...

--
Fred


Back to top
drkm
Guest





PostPosted: Thu Jan 27, 2005 11:49 pm    Post subject: Re: Réserver un espace mémoire d'une taille déterminé Reply with quote

"Alexandre" <alex.g (AT) netcourrier (DOT) com> writes:

Quote:
void *ptr = std::malloc(512); // allocation de 512 octets
^^^^^^


multiplets

--drkm

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Fri Jan 28, 2005 10:23 am    Post subject: Re: Réserver un espace mémoire d'une taille déterminé Reply with quote

Pascal wrote:

Quote:
Je dois programmer le stockage en mémoire persistante (donc un
fichier) d'une page. Une page est un espace mémoire *vive* de
taille paramétrable (mettons 512 octets). Il faut donc que
j'alloue 512 octets, et que j'écrives ces 512 octets dans un
fichier.

Dans quel format ? Sans savoir le format que tu vuex écrire,
c'est impossible à dire comment le faire exactement. (Note que
si ton format n'a pas d'entités plus grand que huit bits, et
n'admet pas que les entités peuvent s'échevaucher les limites
d'un octet, c'est probable que tu puisses travailler dans le
même format interne à ton programme.)

Quote:
Comment faire? Sachant qu'il faudra que je puisse travailler
bit à bit sur cette structure.

Il y a plusieurs possibilités de travailler bit à bit en C++ :
std::bitset, std::vector<bool>, ou simplement avec un tableau de
unsigned char, et des fonctions qui conviennent. (Il existe
aussi d'autres alternatifs sur la toile -- il y a des ensembles
de bit à mon site, par exemple.)

Si ton problème est simplement comment lire ou écrire un seul
bit à la fois :

! void
! setBit( unsigned char* dest, int index )
! {
! dest[ index / CHAR_BIT ] |= 1 << (index % CHAR_BIT) ;
! }

! void
! resetBit( unsigned char* dest, int index )
! {
! dest[ index / CHAR_BIT ] &= ~( 1 << (index % CHAR_BIT) ) ;
! }

! bool
! testBit( unsigned char const* dest, int index )
! {
! return (dest[ index / CHAR_BIT ]
! & (1 << index % CHAR_BIT)) != 0 ;
! }

--
James Kanze GABI Software http://www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34


Back to top
Pascal
Guest





PostPosted: Fri Jan 28, 2005 5:29 pm    Post subject: Réserver un espace mémoire d'une taille déterminé Reply with quote

Bonjour,

Je dois programmer le stockage en mémoire persistante (donc un fichier)
d'une page. Une page est un espace mémoire *vive* de taille paramétrable
(mettons 512 octets). Il faut donc que j'alloue 512 octets, et que
j'écrives ces 512 octets dans un fichier.

Comment faire? Sachant qu'il faudra que je puisse travailler bit à bit
sur cette structure.
--
Pascal
Back to top
pascal
Guest





PostPosted: Mon Apr 04, 2005 9:09 am    Post subject: Re: Réserver un espace mémoire d'une taille déterminé Reply with quote

Frederic Py a écrit :

Quote:
On 2005-01-27 21:46:51 +0100, Frederic Py <fredpy (AT) SPAM (DOT) free.fr> said:
[...]


A partir de là pourquoi ne pas utiliser std::bitset
(http://www.sgi.com/tech/stl/bitset.html)
#include
pourquoi donner un lien vers SGI?

Est ce l'implementation standard ou celle de SGI?


Back to top
Fabien LE LEZ
Guest





PostPosted: Mon Apr 04, 2005 9:20 pm    Post subject: Re: Réserver un espace mémoire d'une taille déterminé Reply with quote

On Mon, 04 Apr 2005 11:09:37 +0200, pascal <p.thisse (AT) tiscali (DOT) fr>:

Quote:
pourquoi donner un lien vers SGI?

Le contenu site de SGI est un exemple de documentation de la
bibliothèque standard, ainsi qu'un exemple de son implémentation.

Cette documentation correspond donc à l'implémentation de la
bibliothèque standard fournie avec n'importe quel compilo
raisonnablement récent.


--
;-)

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.