* obstack_alloc & _obstack_newchunk
@ 2005-02-23 12:45 J.
0 siblings, 0 replies; 4+ messages in thread
From: J. @ 2005-02-23 12:45 UTC (permalink / raw)
To: linux-c-programming
Wednesday, February 23
Hello, I am looking into the GNU's obstack lib .
Unfortunatly it segfaults. According to a backtrace of the program stack
it goes down at obstack_newchunk_ . To be honest I am kind a stuck here.
There is enough free memory available since I am able to write this
message... The only thing I can come up with is that obstack_alloc trys
to add new memory to the address of string_obstack, which isn't properly
setup by moi.. ?
#include <stdio.h>
#include <string.h>
#include <obstack.h>
struct obstack string_obstack;
char *copystring(char *string);
int main(void) {
char *orig = "to copy this string";
char *str = NULL;
str = copystring(orig);
printf("%s\n", str);
return 0;
}
char *copystring(char *string) {
size_t len = 0;
char *s = NULL;
len = strlen(string) + 1;
s = obstack_alloc(&string_obstack, len);
memcpy(s, string, len);
return s;
}
Thnkx..
J.
--
http://www.rdrs.net/
^ permalink raw reply [flat|nested] 4+ messages in thread
* RE: obstack_alloc & _obstack_newchunk
[not found] <NHBBKOOOHBAAJLGEOFLHEENEPJAC.moremari@aca.org.ar>
@ 2005-02-23 13:37 ` J.
2005-02-23 22:49 ` Rechberger Markus
0 siblings, 1 reply; 4+ messages in thread
From: J. @ 2005-02-23 13:37 UTC (permalink / raw)
To: linux-c-programming
On Wed, 23 Feb 2005, Mariano Moreyra wrote:
> Hi J.
>
> You need to init your obstack before using it
> Also, you need to declare this before calling obstack_init()
>
> #define obstack_chunk_alloc malloc
> #define obstack_chunk_free free
>
> So, your code would look like this:
<CUT>
...
</CUT>
Thank you for the complete answer.. !!
Cheers, J.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: obstack_alloc & _obstack_newchunk
2005-02-23 13:37 ` obstack_alloc & _obstack_newchunk J.
@ 2005-02-23 22:49 ` Rechberger Markus
2005-02-24 9:04 ` J.
0 siblings, 1 reply; 4+ messages in thread
From: Rechberger Markus @ 2005-02-23 22:49 UTC (permalink / raw)
To: linux-c-programming
hmm what's the advantage of using the obstack_* functions? isn't
malloc already enough? never saw it in an application actually so I'm
just curious about it..
thanks
Markus
On Wed, 23 Feb 2005 14:37:17 +0100 (CET), J. <mailing-lists@xs4all.nl> wrote:
> On Wed, 23 Feb 2005, Mariano Moreyra wrote:
>
> > Hi J.
> >
> > You need to init your obstack before using it
> > Also, you need to declare this before calling obstack_init()
> >
> > #define obstack_chunk_alloc malloc
> > #define obstack_chunk_free free
> >
> > So, your code would look like this:
>
> <CUT>
> ...
> </CUT>
>
> Thank you for the complete answer.. !!
>
> Cheers, J.
>
> -
> To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: obstack_alloc & _obstack_newchunk
2005-02-23 22:49 ` Rechberger Markus
@ 2005-02-24 9:04 ` J.
0 siblings, 0 replies; 4+ messages in thread
From: J. @ 2005-02-24 9:04 UTC (permalink / raw)
To: linux-c-programming
On Wed, 23 Feb 2005, Rechberger Markus wrote:
> hmm what's the advantage of using the obstack_* functions? isn't
> malloc already enough? never saw it in an application actually so I'm
> just curious about it..
>
> thanks
> Markus
Actually I was asking myself the exact same thing after I read that the
GCC compiler uses this memory allocation strategy. If you google for
obstack you will find a lot of programs using the obstack libs.
From what I understand upon till now, and please correct me if I am wrong:
obstack is a data stack that is used to create pooled memory allocation.
Memory allocation and deallocation, is said to be much faster because it's
done a pool at a time. Error-handling pools can be preallocated so that
programs can make good recovery's if no more regular memory is available.
The lifespan of a memory pool can be crontrolled like the way the apache
webserver does e.g. `Apache Portable Runtime'.
For me personally I don't think I will use this strategy's because I
simply don't need it, but it is still interesting to look into it
because it requires me to actually think about how memory allocation works
and what the options are.
J.
> > On Wed, 23 Feb 2005, Mariano Moreyra wrote:
> > > Hi J.
> > >
> > > You need to init your obstack before using it
> > > Also, you need to declare this before calling obstack_init()
> > >
> > > #define obstack_chunk_alloc malloc
> > > #define obstack_chunk_free free
> > >
> > > So, your code would look like this:
> >
> > <CUT>
> > ...
> > </CUT>
> >
> > Thank you for the complete answer.. !!
> >
> > Cheers, J.
> > -
--
http://www.rdrs.net/
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2005-02-24 9:04 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <NHBBKOOOHBAAJLGEOFLHEENEPJAC.moremari@aca.org.ar>
2005-02-23 13:37 ` obstack_alloc & _obstack_newchunk J.
2005-02-23 22:49 ` Rechberger Markus
2005-02-24 9:04 ` J.
2005-02-23 12:45 J.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).