 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Alexandre Guest
|
Posted: Thu Jan 27, 2005 6:05 pm Post subject: Re: Réserver un espace mémoire d'une taille déterminé |
|
|
"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
|
Posted: Thu Jan 27, 2005 8:46 pm Post subject: Re: Réserver un espace mémoire d'une taille déterminé |
|
|
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;
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
|
Posted: Thu Jan 27, 2005 9:48 pm Post subject: Re: Réserver un espace mémoire d'une taille déterminé |
|
|
On 2005-01-27 21:46:51 +0100, Frederic Py <fredpy (AT) SPAM (DOT) free.fr> said:
[...]
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
|
Posted: Thu Jan 27, 2005 11:49 pm Post subject: Re: Réserver un espace mémoire d'une taille déterminé |
|
|
"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
|
Posted: Fri Jan 28, 2005 10:23 am Post subject: Re: Réserver un espace mémoire d'une taille déterminé |
|
|
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
|
Posted: Fri Jan 28, 2005 5:29 pm Post subject: Réserver un espace mémoire d'une taille déterminé |
|
|
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
|
Posted: Mon Apr 04, 2005 9:09 am Post subject: Re: Réserver un espace mémoire d'une taille déterminé |
|
|
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
|
Posted: Mon Apr 04, 2005 9:20 pm Post subject: Re: Réserver un espace mémoire d'une taille déterminé |
|
|
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 |
|
 |
|
|
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
|
|