hashtable local iterator

Marc Glisse marc.glisse@inria.fr
Mon Dec 19 21:58:00 GMT 2011


On Mon, 19 Dec 2011, Jonathan Wakely wrote:

> On 19 December 2011 21:01, Marc Glisse wrote:
>> #include <iostream>
>> #include <tuple>
>> struct A{};
>> int main(){
>>        std::cout << sizeof(std::tuple<A,A,int>) << std::endl;
>>        std::cout << sizeof(std::tuple<A,int,A>) << std::endl;
>>        std::cout << sizeof(std::tuple<int,A,A>) << std::endl;
>> }
>>
>> and it output 8, 8 and 4.
>> (if I have more than 4 A at the end, the size will increase)
>
> I suppose I should have tested it before making that claim :)
>
> Still, using tuple can use the EBO, even if not always optimally,

In this case, it is a weird quirk in the itanium ABI that is causing this, 
so it looks like we are stuck with it for a while.

But generally, it is quite hard to get a good layout. I wonder if tuple 
shouldn't make a stronger effort to compact the structure, say by sorting 
the elements, empty types first, then by decreasing size. That would 
complicate the implementation quite a bit, but it might be worth it.


-- 
Marc Glisse



More information about the Libstdc++ mailing list