码迷,mamicode.com
首页 > 其他好文 > 详细

异质的数据结构

时间:2019-10-13 15:07:24      阅读:62      评论:0      收藏:0      [点我收藏+]

标签:ble   inter   系统   数据结构   提高   利用   创建   基本   好处   

一. 结构(struct)

struct声明创建一个数据类型,可能将不同类型的对象聚合到一个对象中。

编译器维护关于每个结构类型的信息,指示每个字段的字节偏移。利用这些偏移作为内存引用指令中的位移,从而产生对结构元素的引用。

结构的各个字段的选取完全是编译时处理的,机器代码不包含关于字段声明或含字段名字的信息

结构可以嵌套结构,就像数组可以嵌套在结构中,数组可以嵌套在数组中。

struct prob{
    int *p;
    struct{
        int x;
        int y;
    }s;
    struct prob *next;
}

字段偏移量:p:0  s.x:8  s.y:12  next:16

 

二. 联合(union)

用不同的字段来引用相同的内存块,以多种类型来引用同一个对象

与Union语法相同,但语义完全不同

应用:事先知道对一个数据结构中的两个不同字段的使用是互斥的,便可以将这两个字段声明为联合的一部分。

例如:

实现一个二叉树的数据结构,满足:

每个叶子节点都有两个double类型的数据值

每个内部节点都有指向两个孩子节点的指针,但没有数据

可以按如下方式声明一个节点

union node_u{
    struct{
        union node_u *left;
        union node_u *right;
    } internal;
    double data[2];
}; // 16bytes

缺点:没有办法确定给定节点是叶子结点还是节点

改进:

引入枚举类型,定义联合中的不同选择,然后再创建一个结构,包含一个标签字段和这个联合

typedef num{N_LEAF, N_INTERNAL} nodetype_t;
struct node_t{
    nodetype_t type;
    union{
        struct{
            struct node_t* left;
            struct node_t* right;
        }internal;
        double data[2];
    }info;
}; // 24bytes

对于字段较少的代码,如上例中只有2个字段,相对于给代码造成的复杂性,使用联合带来的节省是很少的。

对于有较多字段的数据结构,联合带来的节省会更吸引人。

注意:字节顺序问题

 

三. 数据对齐

对齐原则:任何K字节的基本对象的地址必须是K的倍数

假设一个处理器总是从内存中取8个字节,那地址必须为8的倍数

好处:简化处理器和内存之间接口的硬件设计,提高内存系统的性能

确保每种数据类型按照指定方式来组织和分配,每种数据类型的对象都满足。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

异质的数据结构

标签:ble   inter   系统   数据结构   提高   利用   创建   基本   好处   

原文地址:https://www.cnblogs.com/louisekou666/p/11666543.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!