Читал статью про кастомные аллокаторы, но не могу понять, как они выделяют память именно на куче, разве есть какой-то способ взять память на куче, кроме malloc/new? Или в функцию передается большой кусок памяти?
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 NULL;
uint32_t newOffset = buf->offset + size;
if(newOffset <= buf->totalSize) {
void* ptr = buf->mem + buf->offset;
buf->offset = newOffset;
return ptr;
}
return NULL; /* out of memory */
}
Суть работы LinearAllocator
следующая
LinearAllocator la(64); //malloc
|________________________________| (64byte) A
Object * obj1 = new(static_cast<Object*>(la.allocate(sizeof(Object)))) Object;
|оbj1|___________________________|
|obj1|obj2|obj3|_________________|
Помните, что LinearAllocator может очистить только весь кусок памяти, то есть удалить только obj3 не получится (Stack Allocator
умеет).
Деструктор нужно вызывать явно.
obj1->~Obj();
obj2->~Obj();
obj3->~Obj();
Плюсы: Внутренняя фрагментация сведена к минимуму(Пространственая локальность).
Минусы: Нет контроля объектов.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Хочу написать двоичное дерево для хранения строкКак упрощенная задача - нужно отсортировать дерево на одном уровне
В коде много "странностей", но основная ошибка в том, что в функции поиска вы почему-то обращаетесь к text[column]Это, разумеется, совершенно не правильно
Есть самописное подобие stlСуть задачи - вектор пар (тоже самописные)
Пишу код под задачу со считалкой в строке и одномерным массивом с людьмиЧерез поток делю строку на слова и через while выполняю считалку один...