Re: Memory issues.
"Valnir" <[email protected]>
| Newsgroups | gmane.games.devel.mud.rom |
|---|---|
| Message-ID | <[email protected]> |
After looking at this post, I think I now understand the difference between static and non-static better. I modified mine to use static instead, so that it doesn't re-allocate all the time. What is the chance of it being overwritten before it's done being used? - Valnir > ----- Original Message ----- > From: "Dennis" <[email protected]> > To: <[email protected]> > Sent: Wednesday, April 06, 2005 11:06 PM > Subject: RE: Memory issues. > > >> His function won't allocate anything at boot time. >> >> If you look close, you'll notice he is using >> >> char command_string[MSL]; >> >> which will allocate memory on the stack when the function is called, not >> >> static char command_string[MSL]; >> >> The only difference in the two functions is that one allocates memory >> on the heap and one on the stack. >> The heap alloacation will take a little bit longer (more work to do), >> while the stack allocation will use up space on the stack (Get too many >> of those MSL buffers on the stack at the same time and you'll have some >> problems. I'm guessing that's why the original >> function didn't use the stack). >> >> >> Dennis >> >> >> On Wed, 6 Apr 2005, Richard Lindsey wrote: >> >>> Well, the memory for that allocation won't be freed before it's done >>> being used, as do_function will wait for the function to return before >>> freeing that chunk, at which point it's done being used... if, for some >>> reason, the function being called were to free the memory internally >>> before returning to do_function, then you would just get a warning in >>> your log that free_string tried to free an invalid size of <whatever>... >>> your revised function looks like it would be ok as well, except that it >>> will allocate the memory for command_string at boot time, even if >>> do_function was never called during gameplay... the current method >>> ensures that memory is only allocated for the command_string if >>> do_function is called... since it's only 1 variable that's MSL in size, >>> it won't really impact performance any, as tons of do_func's allocate >>> multiple variables of that size at boot time... >>> >>> Richard Lindsey. >>> >>> -----Original Message----- >>> From: [email protected] [mailto:[email protected]] On Behalf Of Valnir >>> Sent: Wednesday, April 06, 2005 10:57 AM >>> To: [email protected] >>> Subject: Re: Memory issues. >>> >>> Well.. I think I found ONE of my problems.. It's in the function >>> "do_function". >>> >>> /* function to keep argument safe in all commands -- no static strings >>> */ >>> void do_function (CHAR_DATA *ch, DO_FUN *do_fun, char *argument) >>> { >>> char *command_string; >>> >>> /* copy the string */ >>> command_string = str_dup(argument); >>> >>> /* dispatch the command */ >>> (*do_fun) (ch, command_string); >>> >>> /* free the string */ >>> free_string(command_string); >>> } >>> >>> Umm.. is it just me, or does this seem a little wasteful to allocate >>> memory >>> that could get released before it's done being used? I also posted my >>> REVISED version, please tell me if it makes more sense. >>> >>> /* function to keep argument safe in all commands -- no static strings >>> */ >>> void do_function (CHAR_DATA *ch, DO_FUN *do_fun, char *argument) >>> { >>> char command_string[MSL]; >>> >>> /* copy the string */ >>> strcpy( command_string, argument ); >>> >>> /* dispatch the command */ >>> (*do_fun) (ch, command_string); >>> } >>> >>> - Valnir >> -- >> ROM mailing list >> [email protected] >> Unsubscribe here ->>> http://www.rom.org/cgi-bin/mailman/listinfo/rom >> > -- ROM mailing list [email protected] Unsubscribe here ->>> http://www.rom.org/cgi-bin/mailman/listinfo/rom