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.
>>
>
>

Reply via email to