This commit is contained in:
azw 2023-05-13 12:38:53 +00:00
parent ae48477b57
commit 18a1238512

View File

@ -44,6 +44,21 @@ namespace a8
return (char*)malloc(len); return (char*)malloc(len);
} else { } else {
size_t index = GetIndex(real_len); size_t index = GetIndex(real_len);
list_head* free_node = nullptr;
{
lock_.lock();
free_node = &free_list_[index];
if (list_empty(free_node)) {
free_node = nullptr;
} else {
list_del(free_node);
}
lock_.unlock();
}
if (free_node) {
return (char*)free_node + sizeof(BufHead);
}
} }
} }
@ -53,25 +68,25 @@ namespace a8
size_t FifoBuffer::GetIndex(size_t size) size_t FifoBuffer::GetIndex(size_t size)
{ {
if (size <= 128 * std::pow(2, 0)) { if (size <= BASE_BLOCK_SIZE * std::pow(2, 0)) {
return 0; return 0;
} else if (size <= 128 * std::pow(2, 1)) { } else if (size <= BASE_BLOCK_SIZE * std::pow(2, 1)) {
return 1; return 1;
} else if (size <= 128 * std::pow(2, 2)) { } else if (size <= BASE_BLOCK_SIZE * std::pow(2, 2)) {
return 2; return 2;
} else if (size <= 128 * std::pow(2, 3)) { } else if (size <= BASE_BLOCK_SIZE * std::pow(2, 3)) {
return 3; return 3;
} else if (size <= 128 * std::pow(2, 4)) { } else if (size <= BASE_BLOCK_SIZE * std::pow(2, 4)) {
return 4; return 4;
} else if (size <= 128 * std::pow(2, 5)) { } else if (size <= BASE_BLOCK_SIZE * std::pow(2, 5)) {
return 5; return 5;
} else if (size <= 128 * std::pow(2, 6)) { } else if (size <= BASE_BLOCK_SIZE * std::pow(2, 6)) {
return 6; return 6;
} else if (size <= 128 * std::pow(2, 7)) { } else if (size <= BASE_BLOCK_SIZE * std::pow(2, 7)) {
return 7; return 7;
} else if (size <= 128 * std::pow(2, 8)) { } else if (size <= BASE_BLOCK_SIZE * std::pow(2, 8)) {
return 8; return 8;
} else if (size <= 128 * std::pow(2, 9)) { } else if (size <= BASE_BLOCK_SIZE * std::pow(2, 9)) {
return 9; return 9;
} else { } else {
abort(); abort();