2013/9/24 Nicolas Cellier <nicolas.cellier.aka.n...@gmail.com> > Isn't Eliot just implementing this feature, having a segment of non > relocatable objects? >
AFAIU, yes ;-) Cheers, Luc > > > 2013/9/23 Igor Stasenko <siguc...@gmail.com> > >> >> >> >> On 23 September 2013 21:40, Igor Stasenko <siguc...@gmail.com> wrote: >> >>> >>> >>> >>> On 23 September 2013 16:23, Camillo Bruni <camillobr...@gmail.com>wrote: >>> >>>> Hi Jan, >>>> >>>> I think I will add the ByteArray accessor to NBExternalAddress today >>>> or tomorrow since I need it as well for another project. >>>> >>>> hmm, reading from memory into bytearray can be done with memory copy: >>> >>> inputs: address , offset , size to read >>> >>> newAddress := NBExternalAddress value: address value + offset. >>> buffer := ByteArray new: size. >>> NativeBoost memCopy: newAddress to: buffer size: size. >>> >>> same way, writing, just swap the source and destination: >>> >>> newAddress := NBExternalAddress value: address value + offset. >>> buffer "is given from somewhere". >>> NativeBoost memCopy: buffer to: newAddress size: size. >>> >>> but as Jan noted, you cannot tell to write starting at specified offset >>> from/to bytearray, e.g.: >>> >>> copy from: address to: buffer + someOffset >>> neither: >>> copy from: buffer + someOffset to: someAddress >>> >>> this where we need to introduce special 'field address' type, so you >>> can construct it like this: >>> >>> offsetAddress := buffer nbAddressAt: offset. >>> >>> so then you can use it to pass to any function, which expects address, >>> like memory copy >>> or any foreign function. >>> >>> Since objects are moving in memory, we cannot calculate address of field >>> before hand: >>> >>> address := NBExternalAddress value: someObject address + offset. >>> >>> because if GC will happen, after computing such address and its actual >>> use, >>> you will read/write to wrong location. >>> >> >> ** after computing and *before* actual use ** >> >> >>> Thus we should keep oop + offset up to the point of passing it to >>> external function, under >>> controllable conditions, that guarantee there's no GC is possible. >>> >>> >>> Things would be much simpler if we could have pinning, isnt? :) >> >> >>> -- >>> Best regards, >>> Igor Stasenko. >>> >> >> >> -- >> Best regards, >> Igor Stasenko. >> > >