c – 元组实现是否有优化的布局?
发布时间:2020-12-16 03:39:06 所属栏目:百科 来源:网络整理
导读:在阅读 this时,我对某个级别的元编程可以为您的班级布局做些什么感到惊讶.我必须承认,如果我不得不陈述我的理解,我不会完全掌握建议的最佳布局是什么: ordering class member by descending alignment i.e. the type with the greatest alignof result goes
在阅读
this时,我对某个级别的元编程可以为您的班级布局做些什么感到惊讶.我必须承认,如果我不得不陈述我的理解,我不会完全掌握建议的最佳布局是什么:
如果我弄错了,请随意纠正我(如果你有一个简短的解释为什么会发生这种情况会更好,我无法在我的问题中复制粘贴大部分理由),但我的问题是关于另一个话题: std :: tuple的任何库实现都有这样的布局优化吗? 如果没有,是否有任何标准的代数数据类型,除了编写这样的机器之外,还有另一种方法可以为我的班级做这个吗? 解决方法
没有库实现我知道优化布局以进行对齐.您可以使用这样的程序来检查元组布局:
#include <iostream> #include <tuple> struct empty {}; int main() { using T = std::tuple<double,int,empty,short,long>; T t{}; std::cout << &t << 'n'; std::cout << &std::get<0>(t) << 'n'; std::cout << &std::get<1>(t) << 'n'; std::cout << &std::get<2>(t) << 'n'; std::cout << &std::get<3>(t) << 'n'; std::cout << &std::get<4>(t) << 'n'; std::cout << &t+1 << 'n'; std::cout << sizeof(T) << 'n'; } libc按声明的顺序存储元素,并为空成员优化空间.空的成员被分流到前面.样本输出: 0x7fff5ccf39f8 0x7fff5ccf39f8 0x7fff5ccf3a00 0x7fff5ccf39f8 0x7fff5ccf3a04 0x7fff5ccf3a08 0x7fff5ccf3a10 24 libstdc以声明的相反顺序存储元素,并为空成员优化空间.空的成员被分流到前面.样本输出: 0x7ffe4fc5b2a0 0x7ffe4fc5b2b0 0x7ffe4fc5b2ac 0x7ffe4fc5b2a0 0x7ffe4fc5b2a8 0x7ffe4fc5b2a0 0x7ffe4fc5b2b8 24 VS-2015以与声明相反的顺序存储元素,并且不会为空成员优化空间.样本输出: 0306FEF4 0306FF04 0306FF00 0306FEFC 0306FEF8 0306FEF4 0306FF0C 24 在这个例子中,我们看到为空成员优化空间并没有买任何东西,因为它无论如何都适合填充区域. 没有任何设施可以自动完成标准中减少填充的任务. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |