Custom memory and addons

Started by
4 comments, last by WitchLord 11 years ago

Hy smile.png

this method:


AS_API int asSetGlobalMemoryFunctions(asALLOCFUNC_t allocFunc, asFREEFUNC_t freeFunc);

 

work only with AngelScript engine, module, contex, but - AS have addons.

Advertisement
True. The add-ons do not use the custom memory functions set in engine. I currently do not have any plans on changing that.

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

i think i'ts no big task, i can modificate addons, but i have small problem for do this

in angelscript.h - have


typedef void *(*asALLOCFUNC_t)(size_t);
typedef void (*asFREEFUNC_t)(void *);

 

but asNEW, asDELTE, asNEWARRAY and asDELETEARRAY we can't use from CScriptArray besoce he live in
as_memory.h

extern asALLOCFUNC_t userAlloc;
extern asFREEFUNC_t  userFree;


// We don't overload the new operator as that would affect the application as well


#ifndef AS_DEBUG


#define asNEW(x)        new(userAlloc(sizeof(x))) x
#define asDELETE(ptr,x) {void *tmp = ptr; (ptr)->~x(); userFree(tmp);}


#define asNEWARRAY(x,cnt)  (x*)userAlloc(sizeof(x)*cnt)
#define asDELETEARRAY(ptr) userFree(ptr)


#else


typedef void *(*asALLOCFUNCDEBUG_t)(size_t, const char *, unsigned int);


#define asNEW(x)        new(((asALLOCFUNCDEBUG_t)(userAlloc))(sizeof(x), __FILE__, __LINE__)) x
#define asDELETE(ptr,x) {void *tmp = ptr; (ptr)->~x(); userFree(tmp);}


#define asNEWARRAY(x,cnt)  (x*)((asALLOCFUNCDEBUG_t)(userAlloc))(sizeof(x)*cnt, __FILE__, __LINE__)
#define asDELETEARRAY(ptr) userFree(ptr)


#endif

 

need move asNEW, asDELTE, asNEWARRAY and asDELETEARRAY from as_memory to angelscript.h for we can use this.

added:

ans so, if addons will be use asNEW, what will be with this code:


#if defined(__S3E__) // Marmalade doesn't understand (nothrow)
newBuffer = (SArrayBuffer*)new asBYTE[sizeof(SArrayBuffer)-1 + elementSize*(buffer->numElements + delta)];
#else
newBuffer = (SArrayBuffer*)new (nothrow) asBYTE[sizeof(SArrayBuffer)-1 + elementSize*(buffer->numElements + delta)];
#endif
 

Rather than exposing the internal macros, it would be easier just to use set a pair of global function pointers and declare a new pair of macros. That way your code won't be so tightly tied to the internals of the library.

Remember that the add-ons are not part of the core library. They should be treated as if they are part of the application. How are you doing the memory allocations for your own types that you register with the library?

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

Remember that the add-ons are not part of the core library. They should be treated as if they are part of the application. How are you doing the memory allocations for your own types that you register with the library?

So, it's good question, for my types i use my memory allocator.
i understand you. You right!
What you think, about make possible set custom memory allocator for addons, example asSetGlobalMemoryFunctions_for_CScriptScrint. ( i use standard CScriptArray, and i think - many guys too ) that it would be convenient, to use from a box!

Yes. I do think it would be good to allow the use of custom memory allocators in the add-ons too. I just haven't spent any time on thinking about the best way of doing it.

AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game

This topic is closed to new replies.

Advertisement