[Bf-committers] BlenderCE - Guardedalloc...
Salvatore Russo
salvatore.russo at laposte.net
Tue Aug 9 13:37:23 CEST 2005
Hallo,
Sorry to ever ask you some clarification. I hope it is the right place to do it. I also continue my post in the forum (in news).
I am facing difficulties with the library Guardedalloc.
In the Blender code, I transformed ALL char in wchar_t, changed all string blabla with Lblabla, changed the memory allocation because wchar_t are 2 bytes and not 1 as char (ex: malloc(string) becomes malloc(string*sizeof(wchar_T)), I changed also calloc, also memcpy and memmove in wmemcpy and wmemmove), I also changed all str* functions with wcs* functions
I hope I forgot nothing! I will discover that in the debugging process.
But for the Guardedalloc library( one single mallocn.c file), I feel losted. This library is managing deep memory management
I can here not do think like that...
I converted this file in Unicode but memory management is very sensitive and I have to say that now, I dont know how to continue
there is a test file for mallocn.c but it is not working
it crashes ever...
My version of mallocn.c has problem. And I dont know where to find information to correct it
And I will not be able to go further before this guardedalloc library is working perfectly.
For example, here some example of mallocn.c where I am not so confident:
#if defined( __sgi) || defined (__sun) || defined (__sun__) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__APPLE__)
#define MAKE_ID(a,b,c,d) ( (int)(a)<<24 | (int)(b)<<16 | (c)<<8 | (d) )
#else
#define MAKE_ID(a,b,c,d) ( (int)(d)<<24 | (int)(c)<<16 | (b)<<8 | (a) )
#endif
//WinCE in UNICODE
#define MEMTAG1 MAKE_ID(L'M', L'E', L'M', L'O')
#define MEMTAG2 MAKE_ID(L'R', L'Y', L'B', L'L')
#define MEMTAG3 MAKE_ID(L'O', L'C', L'K', L'!')
#define MEMFREE MAKE_ID(L'F', L'R', L'E', L'E')
#define MEMNEXT(x) ((MemHead *)(((wchar_t *) x) - ((wchar_t *) & (((MemHead *)0)->next))))
This 0? A Unicode string finish with two 0
can it be a problem here?
or this function:
void *MEM_mallocN(unsigned int len, wchar_t *str)
{
MemHead *memh;
MemTail *memt;
if(sizeof(long)==8)
len = (len + 3 ) & ~3; /* eenheden van 4 */
else
len = (len + 7 ) & ~7; /* eenheden van 8 */
//WinCE in UNICODE!
memh= (MemHead *)malloc((len+sizeof(MemHead)+sizeof(MemTail))*sizeof(wchar_t));
if(memh!=0) {
memh->tag1 = MEMTAG1;
memh->name = str;
memh->nextname = 0;
memh->len = len;
/* memh->level = 0; */
memh->tag2 = MEMTAG2;
memt = (MemTail *)(((wchar_t *) memh) + sizeof(MemHead) + len);
memt->tag3 = MEMTAG3;
addtail(membase,&memh->next);
if (memh->next) memh->nextname = MEMNEXT(memh->next)->name;
totblock++;
mem_in_use += len;
return (++memh);
}
if (err_stream) fwprintf(err_stream, L"Malloc returns nill: len=%d in %s\n",len,str);
return 0;
}
what are these numbers associated to len ??
Has someone an idea about the best method to make this gardedalloc library work on pocketpc :=) Or documentation where I can find relevant information to go further :=) ?
Thanks a lot for your help,
Salvatore
Accédez au courrier électronique de La Poste : www.laposte.net ;
3615 LAPOSTENET (0,34/mn) ; tél : 08 92 68 13 50 (0,34/mn)
More information about the Bf-committers
mailing list