эффективный круговой порядок очередей - PullRequest
1 голос
/ 26 июня 2011

Я использую кольцевую очередь в качестве буфера данных. Я использую массив символов для хранения данных, и моя проблема в том, когда мне нужно просмотреть данные в буфере в их первоначальном порядке. переупорядочение буфера занимает большую часть времени обработки с 64%. Мне нужно, чтобы это было максимально оптимизировано, потому что я использую этот буфер для поиска сигнатур в гигабайтах данных. Будем весьма благодарны за любые предложения по оптимизации и / или любые другие предложения о том, как сохранить этот буфер и легко преобразовать его в массив символов для обработки. заранее спасибо

edit: Я прошу прощения за то, что я имею в виду, если переупорядочить, если данные «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;
}

1 Ответ

4 голосов
/ 26 июня 2011

Прямо сейчас вы копируете все данные, чтобы увидеть их по порядку.Я думаю, что я бы предоставил функцию для преобразования нижнего индекса в указатель на правильное место в буфере:

unsigned char *sub(queue const *q, int subscript) { 
    return q->data + (front + subscript) % q->size);
}

Тогда использование данных по порядку будет выглядеть примерно так:

for (i=0; i<q->size; i++)
    printf("%c\n", *sub(q, i));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...