An important pull request: accessing shared affix for immutable data

ZombineDev via Digitalmars-d digitalmars-d at puremagic.com
Sat Feb 13 14:59:43 PST 2016


On Saturday, 13 February 2016 at 22:01:45 UTC, deadalnix wrote:
> On Saturday, 13 February 2016 at 21:10:50 UTC, Andrei 
> Alexandrescu wrote:
>> There's no need. I'll do the implementation with the prefix, 
>> and if you do it with a global hashtable within the same or 
>> better speed, my hat is off to you.
>>
>
> That is false dichotomy. What about storing the metadata at an 
> address that is computable from from the object's address, 
> while not being contiguous with the object allocated ? Is 
> substracting a constant really the only option here ? (hint, it 
> is not)

1) False-sharing overhead:
If you look at the case where the allocated data is non-shared, 
you'll get better cache locality, instead of sharing overhead on 
the cache coherency system.

2) Unfriendly allocation size:
In general you're correct, but in the end, it depends on the type 
of data. If you consider the case of shared_ptr - refcount as 
metadata + ptr as the actual allocation - you get a nice 
allocation size of 2*size_t.sizeof.
As I see it, AffixAllocator is not a silver bullet, but in some 
very specific cases it can actaully be a very good fit. You just 
have to carefully consider this case-by-case. E.g. for shared 
types with irregular size we can just switch to a different 
allocator - that's the whole point of the composable allocators.

3) Increased probability/danger of buffer overflow/underflow:
First, I would say that things like slice bounds checks make D a 
safer language for the average user than C/C++, which should make 
this a bit less of a problem.
Second, I actually think that even if this suddenly leads to a 
lot of problems for the end users, this would bring more pressure 
for adding more Ada/Rust-like static analysis for D - which is a 
Good Thing.


More information about the Digitalmars-d mailing list