Re: Memory woes
- From: Tristan Van Berkom <vantr touchtunes com>
- To: Rico <ras_kalb yahoo com>
- Cc: gtk-app-devel-list gnome org
- Subject: Re: Memory woes
- Date: Tue, 25 Feb 2003 13:56:36 -0500
Rico wrote:
Hello All!
I'm getting my hands dirrty with Pan. I have the following struct:
******************************************************************************
typedef struct _Group
{
GMutex * article_mutex;
guint loaded_since_last_fetch : 1;
guint articles_dirty : 1;
char permission;
gint8 flags;
gint8 old_sort_style;
gint8 new_sort_style;
gulong filter_show;
guint32 filter_bits;
gint32 article_qty;
gint32 article_read_qty;
gulong article_low;
gulong article_last_low_fetched;
gulong article_high;
gulong article_high_old;
Server * server;
char * name;
char * filter_name;
char * identity_name;
char * description; /* maybe null */
char * download_dir;
char * default_charset;
GStringChunk * chunk;
/* PRIVATE */
int _articles_refcount;
MemChunk * _article_chunk; /* Article objects */
Newsrc * _newsrc;
Newsrc * _purged;
GHashTable * _articles;
GPtrArray * _deleted_articles;
char * _one_big_chunk;
guint _no_fetch_on_load : 1;
}
Group;
*****************************************************************************
Something like: Group * g = group_new(server, name);
returns a properly initialized, complete Group, with all the above members
as reported by gdb. I add those Group's to a GPtrArray like so:
GPtrArray * groups = g_ptr_array_new ();
g_ptr_array_add (groups, g);
then call_some_func((Group **) groups->pdata);
but inside call_some_func(Group **groups), for all x, on
print *groups[x]
gdb does not see the last member, _no_fetch_on_load. However, the compiler does
not complain about an unknown member. Instead,
if (!groups[x]->_no_fetch_on_load) fetch_headers();
would _always_ make the call to fetch_headers(), even though I had set
_no_fetch_on_load to TRUE before getting to that point. Anyone has any idea,
could provide any hint about what's going on here? I've tried using a gboolean
instead of a guint _no_fetch_on_load, but same problem. Also, what does the
':1'
mean in "guint loaded_since_last_fetch : 1" ? Is it a compiler extension or is
it standard C ?
`:1' is standard C.
it's usually used to keep structures small.
i.e. `:1' means this is a `1 bit' variable.
for example
struct structure {
uint var1 : 2;
uint var2 : 3;
int var3 : 1;
uint var4 : 1;
int var5 : 25;
};
should yeild a structure
of 32 bits. (I think if they
total 8 bits it will still
total 32).
uint var: 1;
can hold the values 0 or 1.
uint var: 1 = -1; // what happens here ?
So what it comes down to is
the signed or unsigned bit.
if you assign TRUE to a
uint var:1; what do you
get ? (1 ?)
TRUE is usually defined as (!FALSE)
which is defined as (0).
printf("%d\n", TRUE); usually yeilds "-1"
anyhow... I'm sure you've got enough
information to proceed. (pretty cool
feature for the C compiler ;D )
Cheers,
-Tristan
Thanks,
Rico.
__________________________________________________
Do you Yahoo!?
Yahoo! Tax Center - forms, calculators, tips, more
http://taxes.yahoo.com/
_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]