Я работаю над своим C программным кодом для выделения памяти без использования malloc()
. Мой друг использовал связанный список для управления памятью, и я делаю это в этом примере, но я не знаю, как этот тип назначения работает в функции memory_init()
.
Вот основной пример теста:
#include <string.h>
int main() {
char region[50];
memory_init(region, 50);
char* pointer = (char*) memory_alloc(10);
if (pointer) memset(pointer, 0, 10);
if (pointer) memory_free(pointer);
return 0;
}
и есть функция memory_init()
:
void memory_init(void *ptr, unsigned size) {
struct metadata *first;
first=(struct metadata*)ptr;
first->next=NULL;
first->prev=NULL;
if (size > sizeof(struct metadata)) first->value=(size - sizeof(struct metadata));
else first->value=0;
first->boo=-1;
zac=first;
}
, и там также используется структура:
struct metadata{
short boo; // if -1 free, if 1 memory used
unsigned value; //size of memory block
struct metadata *next;
struct metadata *prev;
};
Так что я не знаю, как эта часть код работает:
first=(struct metadata*)ptr;
При том, что я вижу, он принимает массив символов, отправленный в функцию, перепечатывает его в структуру и присваивает его, но я не знаю, как такое назначение работает? Он присваивает адрес памяти или что-то, потому что я не понимаю, как я могу перепечатывать char в struct. В основном я хотел бы знать, что там происходит.