我有一个预定义的结构要使用:
typedef struct somestruct_s {
int s;
union {
unsigned char *ptr;
unsigned char l_ptr[sizeof(char *)];
};
}somestruct_t, *somestruct;
它包含减少内存使用量的联合。 我知道由于m32和m64编译(指针大小),大小可能会有所不同。 我的问题是如何“使用”该结构来进行精确分配。此结构的目的是实现基本位操作,s变量包含位图的大小(以字节为单位)。如果位图可以适合指向位图的指针所占用的内存,那么我们在那里分配它。我在上面写了一些位图操作,但我无法真正得到结构或如何操作它。
答案 0 :(得分: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;
}
}