Thanks :)

In this case I'm not worried about compatibility with C but about reducing 
pointer hops in a tree. I suppose that allowing pointers to be inlined into 
arrays would require storing offsets in the array meta so the GC can find 
them. I'll have to figure out something else.

On Tuesday, 5 January 2016 04:11:01 UTC, Isaiah wrote:
>
> Are only transitively immutable types stored inline?
>
>
> Yes. You can check `isbits(T)`, which in this case returns false because 
> `B.pointerfree == false`.
>  
>
>> Is this documented
>> anywhere?
>
>
> Unfortunately, the only hint at the moment appears to be 
>
> http://docs.julialang.org/en/release-0.4/devdocs/reflection/?highlight=isbits
>
> and probably a number of mailing list questions.
>
> The statement there remains true: if you are worried about C-compatible 
> layout, check whether the type is `isbits`.
>
> On Mon, Jan 4, 2016 at 7:15 PM, Jamie Brandon <
> [email protected] <javascript:>> wrote:
>
>> This surprised me:
>>
>> immutable A
>>   a::UInt32
>>   b::UInt32
>>   c::UInt64
>>   d::UInt64
>> end
>>
>> sizeof(A[A(0,0,0,0), A(0,0,0,0)]) # 48
>>
>> immutable B
>>   a::UInt32
>>   b::UInt32
>>   c::Vector{UInt64}
>>   d::Vector{UInt64}
>> end
>>
>> sizeof(B[B(0,0,[],[]), B(0,0,[],[])]) # 16
>>
>> I expected the latter to also have size 48 ie 2xInt32, 2xPointer. Are
>> only transitively immutable types stored inline? Is this documented
>> anywhere?
>>
>
>

Reply via email to