创建预定义的结构动态矢量(Creating dynamic vector on predefined

2019-09-29 00:50发布

我有一个预定义结构的使用方法:

typedef struct somestruct_s {
    int s;
    union {
        unsigned char *ptr;
        unsigned char l_ptr[sizeof(char *)];
    };
}somestruct_t, *somestruct;

它包含了工会,以减少内存使用情况。 我所知道的大小可以变化,由于M32和M64汇编(指针大小)。 我的问题是如何“使用”是结构为我的精确分配。 这个结构的目的是要实现基本的位操作,s变量包含以字节为单位的位图的大小。 如果位图可以适合通过指针占用的位图,则我们分配她有记忆里。 我写一些位图操作就可以了,但我真的不能得到结构或如何操作就可以了。

Answer 1:

我不明白你的问题是什么。 你必须有一个主要功能,将根据指针大小正确的指针返回位图:

unsigned char* somestruct_get_bitmap(somestruct_t* ths) {
    if( sizeof(char*) > ths->s ) 
        return ths->ptr;
    return ths->l_ptr;
}

所有其他功能必须使用此功能以获得正确的指针位图。 还需要构造函数/析构函数对初始化/以正确的方式取消初始化位图指针(原因我显示最简单的例子假设你有空值终止的位图):

unsigned char* somestruct_init(somestruct_t* ths, unsigned char* ptr) {
    ths->s = strlen(ptr) + 1;
    if( sizeof(char*) > ths->s )  {
       ths->ptr = strdup(ptr);
       return;
    }
    strcpy(ths->l_ptr, ptr);
}

unsigned char* somestruct_destroy(somestruct_t* ths) {
    if( sizeof(char*) > ths->s )  {
        free(ths->ptr);
        return;
    }
}


文章来源: Creating dynamic vector on predefined struct