RE: [GD-Windows] Function to see if a pointer is on the stack
Brought to you by:
vexxed72
From: Jacob T. \(C. D. Ltd\) <Ja...@Co...> - 2004-08-20 12:08:04
|
Yes and unfortunately I can't use ref counted technique. What we are using this for is: when we construct hash'es from a string we save the string ptr in a map = table so we can go back from a hash value to a string to aid debugging. = This fails if the string was constructed on the stack. So now we are = copying the string to our own string table and saving the pointer to the = copy. But in a quest for optimisation (because we are cross-platform = and want to run on some console h/w with no extra debug memory) we only = want to copy the string to our string table if the string is on the = stack, because for strings from static data then the pointer is valid. I think for now we will just make the PC function return TRUE and write = correct versions for other consoles which need it. In fact we might just ditch the whole thing are just always use the = string table because it doesn't require that much space (~8KB) and I = have also thought of a situation where the copying of the pointer would = fail even for non-stack strings. For hash'es made from strings in a = loaded in from an asset file then the pointer could be invalid because = we allow our asset files to get moved around in memory. Thanks anyway Jake > -----Original Message----- > From: gam...@li... > [mailto:gam...@li...]On Behalf Of > Andrew Grant > Sent: 20 August 2004 12:53 > To: gam...@li... > Subject: RE: [GD-Windows] Function to see if a pointer is on the stack >=20 >=20 > =20 > I think Jon's point wasn't necessarily to use std::string,=20 > but to use a > refcounted technique with something like a smartpointer. That=20 > ensures that > your encapsulated data stays alive as long as the=20 > smartpointer does - which > can be returned, passed back by reference and so on. >=20 > Consoles are easy as you can control where the stack goes=20 > yourself and check > the range (for instance on PS2 our main thread's on the top=20 > half of the > scratchpad) but trying something like this on Windows would=20 > fill me with > dread :) >=20 > I'm curious as to what you're trying to do though, I can see=20 > the case with > strings where e.g you might want to format and return an=20 > error message (we > do this and have a string class with derivatives for stack=20 > usage and heap > usage which understand each other and know how to handle the=20 > situation of > e.g passing a string which was build up on the heap). >=20 >=20 > _____________________________ > andrew grant > lead programmer, climax brighton >=20 >=20 >=20 >=20 > -----Original Message----- > From: gam...@li... > [mailto:gam...@li...] On=20 > Behalf Of Jacob > Turner (Core Design Ltd) > Sent: 20 August 2004 12:29 > To: gam...@li... > Subject: RE: [GD-Windows] Function to see if a pointer is on the stack >=20 > Unfortunately can't do the reliable method. My example for=20 > copying strings > is just an example so can't use std::string<> or bare pointer=20 > technique. >=20 > Bit scared about the other option because we are in a=20 > multi-threaded app and > this function would be common to all threads and we don't=20 > have explicit > creation of common library stuff when a new thread is made. >=20 > Isn't there a really PC specific code e.g. getting the stack=20 > ptr etc. This > is how I am doing the function on consoles. >=20 > Mind you not a big hassle because on the PC we have so much=20 > memory that > don't care if just always copy strings or whatever data i.e.=20 > can make is > variable on stack function return TRUE all the time. >=20 > Thanks >=20 > Jake >=20 > > -----Original Message----- > > From: gam...@li... > > [mailto:gam...@li...]On=20 > Behalf Of=20 > > Jon Watte > > Sent: 19 August 2004 18:19 > > To: gam...@li... > > Subject: RE: [GD-Windows] Function to see if a pointer is=20 > on the stack > >=20 > >=20 > > The most reliable way of doing this is to use a class for your=20 > > argument rather than bare pointers, and have a constructor=20 > from bare=20 > > pointers, and use reference counting in the class implementation --=20 > > this is almost exactly what std::string<> already does for you! > >=20 > > Else, you can register the stack pointer in main() (or the entry=20 > > function for each thread/fiber), and get the stack pointer in the=20 > > called function, and compare -- this is not entirely=20 > portable, because=20 > > the stack may grow up on some architectures. > >=20 > > // non-threaded version -- if you use threads or fibers, //=20 > you need=20 > > one gBase per thread/fiber > >=20 > > char * gBase; > >=20 > > void register_main( char * base ) { > > gBase =3D base; > > } > >=20 > > bool is_stack_pointer( char const * ptr ) { > > char top[10]; > > assert( top < gBase ); // else stack grows up > > return (ptr < gBase) && (ptr > top); } > >=20 > > int main() { > > ... > > char junk[ 10 ]; > > register_main( junk ); > > ... > > } > >=20 > > void some_func( char * anArg ) { > > if( is_stack_pointer( anArg ) ) { > > ... > > } > > } > >=20 > >=20 > > -----Original Message----- > > From: gam...@li... > > [mailto:gam...@li...]On=20 > Behalf Of=20 > > Jacob Turner (Core Design Ltd) > > Sent: Thursday, August 19, 2004 9:30 AM > > To: gam...@li... > > Subject: [GD-Windows] Function to see if a pointer is on the stack > >=20 > >=20 > > Is there some simple and reliable code for a console or=20 > windows app to=20 > > test if a pointer value is on the stack or not ? > >=20 > > If the pointer is on the stack (e.g. a string) then we want to copy=20 > > the string to heap memory for reuse later on. > >=20 > > Cheers > >=20 > > Jake > >=20 > >=20 > > ------------------------------------------------------- > > SF.Net email is sponsored by Shop4tech.com-Lowest price on=20 > Blank Media=20 > > 100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for=20 > only $33 Save=20 > > 50% off Retail on Ink & Toner - Free Shipping and Free Gift. > > http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285 > > _______________________________________________ > > Gamedevlists-windows mailing list > > Gam...@li... > > https://lists.sourceforge.net/lists/listinfo/gamedevlists-windows > > Archives: > > http://sourceforge.net/mailarchive/forum.php?forum_idU5 > >=20 > >=20 > >=20 > > ------------------------------------------------------- > > SF.Net email is sponsored by Shop4tech.com-Lowest price on=20 > Blank Media=20 > > 100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for=20 > only $33 Save=20 > > 50% off Retail on Ink & Toner - Free Shipping and Free Gift. > > http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285 > > _______________________________________________ > > Gamedevlists-windows mailing list > > Gam...@li... > > https://lists.sourceforge.net/lists/listinfo/gamedevlists-windows > > Archives: > > http://sourceforge.net/mailarchive/forum.php?forum_id=3D555 > >=20 >=20 >=20 > ------------------------------------------------------- > SF.Net email is sponsored by Shop4tech.com-Lowest price on=20 > Blank Media 100pk > Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33=20 > Save 50% off > Retail on Ink & Toner - Free Shipping and Free Gift. > http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285 > _______________________________________________ > Gamedevlists-windows mailing list > Gam...@li... > https://lists.sourceforge.net/lists/listinfo/gamedevlists-windows > Archives: > http://sourceforge.net/mailarchive/forum.php?forum_idU5 >=20 >=20 > ------------------------------------------------------- > SF.Net email is sponsored by Shop4tech.com-Lowest price on Blank Media > 100pk Sonic DVD-R 4x for only $29 -100pk Sonic DVD+R for only $33 > Save 50% off Retail on Ink & Toner - Free Shipping and Free Gift. > http://www.shop4tech.com/z/Inkjet_Cartridges/9_108_r285 > _______________________________________________ > Gamedevlists-windows mailing list > Gam...@li... > https://lists.sourceforge.net/lists/listinfo/gamedevlists-windows > Archives: > http://sourceforge.net/mailarchive/forum.php?forum_id=3D555 >=20 |