Я реализую свой собственный пул памяти в C, и у меня возникла проблема с поиском количества байтов, на которые указывает указатель на * ptr (size_t poolSize (void * ptr)). Код просто для того, чтобы показать часть того, что у меня есть и где проблема, я знаю, что мне приходится иметь дело с выравниванием и некоторыми другими вещами. Я также новичок в C, который я сам изучаю, поэтому я все еще изучаю, как работают указатели (моя проблема может быть с указателями).Управление пулом памяти в C
#include <stdio.h>
#include <stdlib.h>
typedef struct NODE MemPool;
struct NODE
{
char * next;
char * end;
};
MemPool * poolCreate(size_t size)
{
MemPool * newPool = (MemPool *)malloc(size + sizeof(MemPool));
newPool->next = (char*)&newPool[1];
newPool->end = newPool->next + size;
return newPool;
}
void * poolAlloc(MemPool *pool, size_t size)
{
void *result = NULL;
if((pool->end - pool->next) < size)
return NULL;
result = (void *)pool->next;
pool->next += size;
return result;
}
size_t poolSize(void *ptr)
{
return ((size_t)&ptr);
}
void poolDestroy(MemPool *pool)
{
free(pool);
}
Что указывает 'ptr', когда вызывается' poolSize'? Указывает ли он на пул? Или к распределению, которое поступало из пула? Или что? – kaylum
Вы набрасываете указатель на 'size_t', который, вероятно, очень ошибочен. Возможно, вы хотели направить указатель на 'size_t *' * и * разыменовать его? –
Где вы храните данные? У NODE-структуры нет места для этого. Кроме того, не вычисляйте размеры. Добавьте член, имеющий размер, в структуру NODE. – GMichael