declaracion desconocida de bool

23/05/2005 - 18:54 por Marcio | Informe spam
Buenos días, tengo un código fuente que me mandaron
y que estuve examinando del cual no entiendo la
forma en que declara los atributos booleanos.
Busqué en google hasta cansarme pero no encontré nada.
Les agrega un :1 al final de cada nombre y no
se porque es. Alguien me dijo que era para indicarle
que ocupe solo 1 bit en memoria.
¿es esto cierto?
¿es ansi c++ o solo funciona con el compilador de vs?
¿hay algún enlace a algún tipo de documentación sobre el tema?

Parte del código fuente en cuestión:

class __PROF_UIS_API CExtBarButton : public CObject
{
public:
DECLARE_DYNCREATE(CExtBarButton);
protected:
CSize m_ActiveSize;
CRect m_ActiveRect;
bool m_bWrapH:1,
m_bWrapV:1,
...(sigue definiendo booleanos)

Gracias de antemano
Marcio

Preguntas similare

Leer las respuestas

#1 Rodrigo Corral [MVP]
24/05/2005 - 10:51 | Informe spam
Es, efectivamente, un truco para que el booleano solo ocupe 1 bit en
memoria. Pero ojo no siempre es conveniente usarlo. Lee sobre bit fields en
C/C++. Si que es estandar.


Un saludo
Rodrigo Corral González [MVP]

FAQ de microsoft.public.es.vc++
http://rcorral.mvps.org
Respuesta Responder a este mensaje
#2 Isidro Muñoz
24/05/2005 - 11:29 | Informe spam
Hola,

Yo es la primera vez que veo esa declaración. De todos ¿ para que quieres
que ocupe solo un bit ?

Me imagino que lo que hará es que en un unico byte almacenar todos los bool,
o sea, podrá almacenar hasta 8 bool en el byte de esta forma.

Personalmente pienso que es para ahorrar bytes de memoria o de pila.

Yo está técnica la tendría en cuenta si voy a hacer por ejemplo una función
recursiva que va a consumir mucha pila, y la recursividad es muy grande. O
en caso de memoria que vaya a instanciar muchas veces esta clase, si no
fuera así yo no lo haría.

Hablando a vote pronto creo que este ahorro de memoria va a repercutir en
más ciclos de cpu. Primero hay que indireccionar y luego operaciones bit a
bit.

En fin, es mi opinión.

Saludos.
Isidro.

"Marcio" escribió en el mensaje
news:
Buenos días, tengo un código fuente que me mandaron
y que estuve examinando del cual no entiendo la
forma en que declara los atributos booleanos.
Busqué en google hasta cansarme pero no encontré nada.
Les agrega un :1 al final de cada nombre y no
se porque es. Alguien me dijo que era para indicarle
que ocupe solo 1 bit en memoria.
¿es esto cierto?
¿es ansi c++ o solo funciona con el compilador de vs?
¿hay algún enlace a algún tipo de documentación sobre el tema?

Parte del código fuente en cuestión:

class __PROF_UIS_API CExtBarButton : public CObject
{
public:
DECLARE_DYNCREATE(CExtBarButton);
protected:
CSize m_ActiveSize;
CRect m_ActiveRect;
bool m_bWrapH:1,
m_bWrapV:1,
...(sigue definiendo booleanos)

Gracias de antemano
Marcio

Respuesta Responder a este mensaje
#3 Zephryn Xirdal
24/05/2005 - 11:41 | Informe spam
On Tue, 24 May 2005 11:29:43 +0200, Isidro Muñoz daipro.net> <<imunoz>
wrote:

Hola,

Yo es la primera vez que veo esa declaración. De todos ¿ para que quieres
que ocupe solo un bit ?

Me imagino que lo que hará es que en un unico byte almacenar todos los
bool,
o sea, podrá almacenar hasta 8 bool en el byte de esta forma.

Personalmente pienso que es para ahorrar bytes de memoria o de pila.

Yo está técnica la tendría en cuenta si voy a hacer por ejemplo una
función
recursiva que va a consumir mucha pila, y la recursividad es muy grande.
O
en caso de memoria que vaya a instanciar muchas veces esta clase, si no
fuera así yo no lo haría.

Hablando a vote pronto creo que este ahorro de memoria va a repercutir en
más ciclos de cpu. Primero hay que indireccionar y luego operaciones bit
a
bit.


Depende de la máquina y los recursos disponibles. Hay CPUs con acceso
directo a bits tanto en registros como en memoria (o en áreas específicas
de la memoria). Si tienes poca memoria (windows ce, win mobile, etc), no
tienes más remadio que hacer eso.


En fin, es mi opinión.
Respuesta Responder a este mensaje
#4 Isidro Muñoz
25/05/2005 - 09:57 | Informe spam
Tu lo has dicho, "si tienes poca memoria"

Saludos.
Isidro.

"Zephryn Xirdal" escribió en el
mensaje news:
On Tue, 24 May 2005 11:29:43 +0200, Isidro Muñoz daipro.net> <<imunoz>
wrote:

> Hola,
>
> Yo es la primera vez que veo esa declaración. De todos ¿ para que


quieres
> que ocupe solo un bit ?
>
> Me imagino que lo que hará es que en un unico byte almacenar todos los
> bool,
> o sea, podrá almacenar hasta 8 bool en el byte de esta forma.
>
> Personalmente pienso que es para ahorrar bytes de memoria o de pila.
>
> Yo está técnica la tendría en cuenta si voy a hacer por ejemplo una
> función
> recursiva que va a consumir mucha pila, y la recursividad es muy grande.
> O
> en caso de memoria que vaya a instanciar muchas veces esta clase, si no
> fuera así yo no lo haría.
>
> Hablando a vote pronto creo que este ahorro de memoria va a repercutir


en
> más ciclos de cpu. Primero hay que indireccionar y luego operaciones bit
> a
> bit.
Depende de la máquina y los recursos disponibles. Hay CPUs con acceso
directo a bits tanto en registros como en memoria (o en áreas específicas
de la memoria). Si tienes poca memoria (windows ce, win mobile, etc), no
tienes más remadio que hacer eso.

>
> En fin, es mi opinión.

Respuesta Responder a este mensaje
#5 Zephryn Xirdal
25/05/2005 - 10:24 | Informe spam
On Wed, 25 May 2005 09:57:15 +0200, Isidro Muñoz daipro.net> <<imunoz>
wrote:

Tu lo has dicho, "si tienes poca memoria"

Saludos.
Isidro.



No te vayas a creer que todos vivimos con 512 Mb de RAM, una máquina de
vending o cualquier otro hadware vertical embebido tiene apenas ram.

Lo normal en esos dispositivos es ir muy escaso de recursos... 512 bytes,
1k, 2k y cosas así.



"Zephryn Xirdal" escribió en el
mensaje news:
On Tue, 24 May 2005 11:29:43 +0200, Isidro Muñoz daipro.net> <<imunoz>
wrote:

> Hola,
>
> Yo es la primera vez que veo esa declaración. De todos ¿ para que


quieres
> que ocupe solo un bit ?
>
> Me imagino que lo que hará es que en un unico byte almacenar todos los
> bool,
> o sea, podrá almacenar hasta 8 bool en el byte de esta forma.
>
> Personalmente pienso que es para ahorrar bytes de memoria o de pila.
>
> Yo está técnica la tendría en cuenta si voy a hacer por ejemplo una
> función
> recursiva que va a consumir mucha pila, y la recursividad es muy
grande.
> O
> en caso de memoria que vaya a instanciar muchas veces esta clase, si
no
> fuera así yo no lo haría.
>
> Hablando a vote pronto creo que este ahorro de memoria va a repercutir


en
> más ciclos de cpu. Primero hay que indireccionar y luego operaciones
bit
> a
> bit.
Depende de la máquina y los recursos disponibles. Hay CPUs con acceso
directo a bits tanto en registros como en memoria (o en áreas
específicas
de la memoria). Si tienes poca memoria (windows ce, win mobile, etc), no
tienes más remadio que hacer eso.

>
> En fin, es mi opinión.











Using Opera's revolutionary e-mail client: http://www.opera.com/mail/
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida