This commit is contained in:
azw 2023-05-13 12:31:51 +00:00
parent 2465f88e78
commit ae48477b57
2 changed files with 49 additions and 4 deletions

View File

@ -1,10 +1,15 @@
#include <cmath>
#include <a8/a8.h> #include <a8/a8.h>
#include <a8/fifobuffer.h> #include <a8/fifobuffer.h>
#include <a8/list.h>
const int BASE_BLOCK_SIZE = 128;
struct BufHead struct BufHead
{ {
int len = 0; list_head entry;
}; };
namespace a8 namespace a8
@ -17,8 +22,8 @@ namespace a8
} }
buf_ = (char*)malloc(buf_len); buf_ = (char*)malloc(buf_len);
buf_len_ = buf_len; buf_len_ = buf_len;
for (size_t i = 0; i < chunk_pool_.size(); ++i) { for (size_t i = 0; i < free_list_.size(); ++i) {
INIT_LIST_HEAD(&chunk_pool_[i]); INIT_LIST_HEAD(&free_list_[i]);
} }
} }
@ -31,10 +36,46 @@ namespace a8
char* FifoBuffer::Alloc(int len) char* FifoBuffer::Alloc(int len)
{ {
if (len <= 0) {
abort();
}
int real_len = sizeof(BufHead) + len;
if (real_len > 1024 * 64) {
return (char*)malloc(len);
} else {
size_t index = GetIndex(real_len);
}
} }
void FifoBuffer::Free(char* p) void FifoBuffer::Free(char* p)
{ {
} }
size_t FifoBuffer::GetIndex(size_t size)
{
if (size <= 128 * std::pow(2, 0)) {
return 0;
} else if (size <= 128 * std::pow(2, 1)) {
return 1;
} else if (size <= 128 * std::pow(2, 2)) {
return 2;
} else if (size <= 128 * std::pow(2, 3)) {
return 3;
} else if (size <= 128 * std::pow(2, 4)) {
return 4;
} else if (size <= 128 * std::pow(2, 5)) {
return 5;
} else if (size <= 128 * std::pow(2, 6)) {
return 6;
} else if (size <= 128 * std::pow(2, 7)) {
return 7;
} else if (size <= 128 * std::pow(2, 8)) {
return 8;
} else if (size <= 128 * std::pow(2, 9)) {
return 9;
} else {
abort();
}
}
} }

View File

@ -15,13 +15,17 @@ namespace a8
char* Alloc(int len); char* Alloc(int len);
void Free(char* p); void Free(char* p);
private:
size_t GetIndex(size_t size);
private: private:
char* buf_ = nullptr; char* buf_ = nullptr;
int buf_len_ = 0; int buf_len_ = 0;
a8::SpinLock lock_; a8::SpinLock lock_;
std::array<list_head, 10> chunk_pool_; std::array<list_head, 10> free_list_;
}; };
} }