Khimenko Victor wrote:
This is NOT what you usually want. GC ALWAYS has penatly over "normal" malloc/free way. Yes, there are benefits as well but when you are using third-party library where malloc/free already used then with GC's replacement you'll get slowdown and nothing more. In case of C it's all simple: just use malloc/free and gc_alloc as desired. In case of C++ overloaded new can be used for this purpose. In case of GPC you can have GC-enabled new (with GC's malloc) or non GC-enabled new bot not both :-/ You can not just use gc_alloc(sizeof(record)) since if record has embedded strings or files you need to initialize it first (and if record has virtual part then new can allocate less then gc_alloc(sizeof(record)) -- or is this Pascal's feature not implemented yet?). So the question is: is it possible to use another allocator (and deallocator) in GPC's new ? Something akin to field:=new(malloc,OldNormalNonGcClass); ptr:=new(gc_alloc,TestClass); dispose(free,field);
Something like this was discussed when shred memory allocation problem was discussed but I can not find it :-/
The relevant hooks are GetMemPtr etc., declared in the GPC unit. You need them if you want to switch between different allocators. By default, AIUI, Boehm's GC, when linked in, will be used for all allocations without further action on the Pascal side.
Frank