В образовательных целях решил разобраться как работают аллокаторы, возник не большой вопрос, допустип я хочу сделать самый простой аллокатор, который будет выделать память линейно:
typedef struct _LinearBuffer {
uint8_t *mem; /*!< Pointer to buffer memory. */
uint32_t totalSize; /*!< Total size in bytes. */
uint32_t offset; /*!< Offset. */
} LinearBuffer;
/* non-aligned allocation from linear buffer. */
void* linearBufferAlloc(LinearBuffer* buf, uint32_t size) {
//
if (!buf | !size) return 0;
uint32_t newOffset = buf->offset + size;
if (newOffset <= buf->totalSize) {
void* ptr = buf->mem + buf->offset;
buf->offset = newOffset;
return ptr;
}
return 0; /* out of memory */
}
здесь мне все понятно, кроме одного, как мне использовать буффер, и каким должно быть значение totalSize, получается что titalSize - это размер моей виртуальной памяти, и для всех аллокаторов он одинаков? или же разбивать мою виртуальную память на буфферы определенного размера?