1

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

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

它包含联合以减少内存使用。我知道大小会因 m32 和 m64 编译(指针大小)而有所不同。我的问题是如何为我的精确分配“使用”该结构。该结构的目的是实现基本的位操作,s 变量包含位图的大小(以字节为单位)。如果位图可以放入指向位图的指针所占用的内存中,那么我们将她分配在那里。我在上面写了一些位图操作,但我无法真正获得结构或如何对其进行操作。

4

1 回答 1

0

我无法理解你的问题是什么。您必须有一个主要功能,它将根据指针大小返回正确的位图指针:

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;
    }
}
于 2013-03-25T13:48:23.037 回答