[FFI] Pointer arithmetic impossible on ByteArray?
nicolas cellier
ncellier at ifrance.com
Sat May 20 01:31:24 UTC 2006
Le Samedi 20 Mai 2006 03:03, Andreas Raab a écrit :
> > Of course, i want it in a primitive to avoid this kind of problem.
>
> But even if it's in a primitive, it's no longer immune from GC when you
> return from it. So you can neither return "foo baseAddress" or "foo
> baseAddress+X" from a primitive in a meaningful way. You'd have to do
> the pointer calculation and the call from the same primitive at which
> point you're in plugin (and not FFI) land. And yes, in a plugin you can
> do that just fine.
>
No, i do not want to handle baseAddress in Smalltalk, because i do not care of
absolute address in memory.
What i want is to play with relative memory offset.
If all the pointer arithmetic baseAddress+byteOffset goes into the plugin,
that's fine!
I just want to be able to pass an object (IndirectByteArray?) to a FFI call so
that i can play with memory offset inside ByteArray as i can already play in
external heap.
For example, i would use a memcpy to implement some kind of
replaceFrom:to:with:startingAt:, what i have now working with ExternalAdress,
but not with ByteArray (except startingAt: 1).
> > Is a plugin immune to that kind of moving GC ?
>
> No, of course not. You can't keep references to objects across primitive
> calls for example. Inside primitive calls it depends on what the
> primitive does - various operations (like allocation) may cause GC and
> an oop you referred to before the GC will be no longer valid after it
> unless you explicitly remap it.
>
> Cheers,
> - Andreas
Well, I suppose one must care of order of operations when writing a plugin.
Must be tricky sometimes...
Nicolas
More information about the Squeak-dev
mailing list
|