Я выделяю большую область памяти, чтобы сказать x из 1000 байтов.Примеры или документация для специализированного распределителя хранилища в c?
// I am using c language and all of this is just pseudo code(function prototypes mostly) so far.
pointer = malloc(size(1000 units)); // this pointer points to region of memory we created.
теперь выбрать эту область с помощью указателя и выделить память внутри него на более мелкие блоки, как
void *allocate_from_region(size_of_block1(300)); //1000-300=700 (left free)
void *allocate_from_region(size_of_block2(100)); //700-100 =600
void *allocate_from_region(size_of_block3(300)); //600-300 =300
void *allocate_from_region(size_of_block4(100)); //300-100 =200
void *allocate_from_region(size_of_block5(150)); //200-150 =50
// here we almost finished space we have in region (only 50 is left free in region)
boolean free_from_region(pointer_to_block2); //free 100 more
//total free = 100+50 but are not contiguous in memory
void *allocate_from_region(size_of_block6(150)); // this one will fail and gives null as it cant find 150 units memory(contiguous) in region.
boolean free_from_region(pointer_to_block3); // this free 300 more so total free = 100+300+50 but contiguous free is 100+300 (from block 2 and 3)
void *allocate_from_region(size_of_block6(150); // this time it is successful
Есть ли какие-либо примеры о том, как управлять памятью, как это?
До сих пор я делал только примеры, где я мог бы размещать блоки рядом друг с другом в области памяти и заканчивать его, как только у меня закончится память внутри региона. Но как искать блоки, свободные внутри области, а затем проверить, имеется ли достаточная непрерывная память. Я уверен, что в c должна быть какая-то документация или примеры, в которых показано, как это сделать.
Вы можете объяснить немного больше на 2-й части, где вы пытаетесь объяснить «Чтобы освободить блок в B размера n», как мы можем проверить, находятся ли они непосредственно выше или ниже друг друга? – shunya
@shunya я добавил больше информация. – Gene