【发布时间】:2011-06-26 06:01:36
【问题描述】:
我使用循环队列作为数据缓冲区。我正在使用 char 数组来保存数据,我的问题是当我需要按原始顺序查看缓冲区中的数据时。缓冲区的重新排序占用了 64% 的大部分处理时间。我需要尽可能优化它,因为我使用这个缓冲区来搜索千兆字节数据中的签名。任何优化建议将不胜感激和/或有关如何存储此缓冲区并轻松将其转换为 char 数组进行处理的任何其他建议。提前致谢
编辑:抱歉,我所说的重新排序是指如果数据是“abcdef”,那么缓冲区很有可能看起来像“defabc”,所以我需要将缓冲区重新排序为“abcdef”
队列结构:
typedef struct item{
unsigned char* data;
int length;
} item;
typedef struct queue{
unsigned char *data;
int front;
int back;
int length;
int size;
} queue;
重新排序功能:
int toStr(queue *ptr, item *ret){
int length;
int i;
int j;
int back = ptr->back;
int size = ptr->size;
char* tmp;
char* tmp_data;
if(ptr->length == 0){
return 0;
}
tmp = ret->data;
ret->length = ptr->length;
tmp_data = ptr->data;
i = ptr->front;
j = 0;
while(i != back){
//ret->data[j] = tmp_data[i];
tmp[j] = tmp_data[i];
++i;
++j;
if(i > size){
i = 0;
}
}
return 1;
}
【问题讨论】:
-
您需要按照您输入的顺序输入数据。但无法理解重新排序的部分。
-
我不明白你为什么需要“重新排序”它。