Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 是否有算法重新排列结构成员以最小化对齐填充?_Algorithm_Sorting_Language Design_Memory Alignment - Fatal编程技术网

Algorithm 是否有算法重新排列结构成员以最小化对齐填充?

Algorithm 是否有算法重新排列结构成员以最小化对齐填充?,algorithm,sorting,language-design,memory-alignment,Algorithm,Sorting,Language Design,Memory Alignment,默认情况下,我一直在创建一种编程语言,并尝试对结构/记录成员进行重新排序,以提高(内存)效率和性能。目前,我将按从大到小(如果大小相同,则按原始源顺序)对成员进行重新排序。但是,这并不能在所有情况下最小化对齐填充 是否有算法重新排列结构成员以最小化对齐填充?(问题本身就很难解决吗?)算法必须考虑构件的对齐,而不仅仅是其尺寸 C中的示例: // Source Order struct A { // size -> 10 Bytes int8 a int32 b; i

默认情况下,我一直在创建一种编程语言,并尝试对结构/记录成员进行重新排序,以提高(内存)效率和性能。目前,我将按从大到小(如果大小相同,则按原始源顺序)对成员进行重新排序。但是,这并不能在所有情况下最小化对齐填充

是否有算法重新排列结构成员以最小化对齐填充?(问题本身就很难解决吗?)算法必须考虑构件的对齐,而不仅仅是其尺寸

C中的示例:

// Source Order
struct A { // size -> 10 Bytes
    int8  a
    int32 b;
    int16 c;
};
// Optimal Internal Order
struct A { // size -> 7 Bytes
    int32 b;
    int16 c;
    int8  a;
};

// Source Order
struct B { // size -> 20
    int8  a[7];
    int16 b[3];
    int8  c;
    int16 d;
};
// Optimal Internal Order
struct B { // Size -> 16
    int16 b[3];
    int16 d;
    int8  a[7];
    int8  c;
};

如果不说明要执行的对齐规则,此问题将毫无意义。例如,x86体系结构不需要填充(向量指令除外)。填充以实现对齐是空间与运行时的折衷。对齐约束到底是什么?n位整数必须是n位对齐的?@s单击默认对齐约束:整数和浮点:等于其大小;数组:元素类型的对齐方式;(simd)向量:取决于向量类型(可以是8字节、16字节等);记录:最大成员的对齐。但是,对于用户指定的对齐方式,这是不正确的。在C和一般C++的情况下,结构的第一个成员的地址应该与结构的地址相同,因此,第一个成员不应重新排序。如果所有对齐要求都是2的幂,并且没有成员的大小小于其对齐要求,则通过减少对齐要求进行排序将是最优的。更具体地说,如果需要任何填充,它可以全部显示在最末尾。