Is it's correct to say that ALL types that can grow are place on heap?

rikki cattermole rikki at cattermole.co.nz
Wed Sep 12 15:30:59 UTC 2018


On 13/09/2018 3:22 AM, Timoses wrote:
> On Wednesday, 12 September 2018 at 14:46:22 UTC, rikki cattermole wrote:
>> On 13/09/2018 2:34 AM, drug wrote:
>>> 12.09.2018 15:14, Timoses пишет:
>>>> On Tuesday, 11 September 2018 at 12:07:14 UTC, drug wrote:
>>>>>
>>>>> If data size is less or equal to total size of available registers 
>>>>> (that can be used to pass values) than passing by value is more 
>>>>> efficient. Passing data with size less than register size by 
>>>>> reference isn't efficient because you pass pointer (that has 
>>>>> register size) and access memory using it.
>>>>
>>>> Thank you!
>>>> So if I pass by reference it will ALWAYS use the address in memory 
>>>> to fetch the data, whereas passing it by value enables the 
>>>> (compiler?..) to use the register which has already loaded the data 
>>>> from memory (stack for example)?
>>>
>>> Honestly, I'm not an expert in this domain, but I think so.
>>
>> Recently used areas of the stack will be available in the cache in 
>> most cases. The issue with passing by reference is it increases the 
>> indirection (number of pointers) that it must go through to get to the 
>> raw bytes.
>>
>> This is why classes are bad but structs are good. Even if the struct 
>> is allocated on the heap and you're accessing it via a pointer.
> 
> This sounds like classes should never be used.. I don't recall right now 
> what issues I'm usually encountering with structs that make me switch to 
> classes (in D).

Nah, this is cycle counting aka don't worry about it if you're not doing 
anything super high performance.



More information about the Digitalmars-d-learn mailing list