Isn't Eliot just implementing this feature, having a segment of non relocatable objects?
2013/9/23 Igor Stasenko <[email protected]> > > > > On 23 September 2013 21:40, Igor Stasenko <[email protected]> wrote: > >> >> >> >> On 23 September 2013 16:23, Camillo Bruni <[email protected]> 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. >
