Всем привет, решил сам организовывать память в своих приложениях, и написал свои простые аллокаторы памяти, все работает прекрасно, но одна проблема: если в классе есть виртуальные методы, то они почему-то не хотят вызываться, и постоянно вылетает ошибка segmentation fault. Почему так? понятно что под виртуальные методы отдельно выделяется память, но я пробовал уже и по 1МБ под класс выделять, один фиг не хочет работать :( Вот код пуллового аллокатора:
/*!< Pool Allocator >!*/
//
void CreatePoolBuffer(PoolBuffer *buf, uint32_t size, uint32_t chunkSize) {
//
buf->totalSize = size;
buf->chunkSize = chunkSize;
buf->mem = (uint8_t*)mmap(0, size, PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
//
const uint32_t chunkCount = (size / chunkSize) - 1;
for (uint32_t i = 0; i < chunkCount; ++i) {
uint8_t* currChunk = buf->mem + (chunkSize*i);
*((uint8_t**)currChunk) = currChunk + chunkSize;
}
*((uint8_t**)&buf->mem[chunkCount * chunkSize]) = 0;
buf->head = buf->mem;
//
}
//
inline void* PoolAlloc(PoolBuffer* buf) {
//
uint8_t* currPtr = buf->head;
buf->head = (*((uint8_t**)(buf->head)));
return currPtr;
}