[Crossfire-wiki] [Crossfire DokuWiki] page added: dev:shared_strings

no-reply_wiki at metalforge.org no-reply_wiki at metalforge.org
Thu Mar 22 06:29:25 CDT 2007


A page in your DokuWiki was added or changed. Here are the details:

Date        : 2007/03/22 06:29
User        : ryo
Edit Summary: basics

To minimize memory use, Crossfire uses a shared string mechanism. This is intended to be used for strings whose contents is not expected to change during the server's life.

Those strings are used like regular ''const char*'', but should not be changed via ''strcpy'', ''snprintf'' or other means because it would affect **all** structures using the shared string. Internally, they use a counter to track at how many places they are used. When it reaches 0, string is freed.

To alter such a string, the right behaviour is:
  * write new value in a ''char[] new_value'' variable
  * use ''free_string(str)''
  * call ''str = add_string(new_value)''

FIXME replace with sstring when done in code

To manipulate them, the following functions (defined in ''[[http://crossfire.svn.sourceforge.net/viewvc/crossfire/server/trunk/common/shstr.c?view=markup|common/shstr.c]]'') are available:
  * ''const char* add_string(const char *str)'', used to share a string. Returned value is a string with the same contents that can be shared with other objects
  * ''const char* add_refcount(const char *str)'', equivalent of ''add_string'' when the string is already a shared string
  * ''const char* find_string(const char *str)'', to search if a string is shared or not
  * ''void free_string(const char *str)'', to decrement the use counter. After it's called, ''str'' should not be used anymore.

IP-Address  : 172.186.46.252
Old Revision: none
New Revision: http://wiki.metalforge.net/doku.php/dev:shared_strings

-- 
This mail was generated by DokuWiki at
http://wiki.metalforge.net/




More information about the crossfire-wiki mailing list