@@ -39,13 +39,11 @@ void heap_init() {
3939}
4040
4141int expand_heap (u32 size ) {
42- // Выравниваем размер вверх до границы страницы
4342 u32 num_pages = (size + PAGE_SIZE - 1 ) / PAGE_SIZE ;
4443 u32 expand_size = num_pages * PAGE_SIZE ;
4544
4645 printf ("Expanding heap by %d bytes (%d pages)\n" , expand_size , num_pages );
4746
48- // Мы будем расширять кучу начиная с адреса heap_current_end
4947 u32 virtual_address = heap_current_end ;
5048
5149 for (u32 i = 0 ; i < num_pages ; i ++ ) {
@@ -56,31 +54,26 @@ int expand_heap(u32 size) {
5654 return 0 ;
5755 }
5856
59- // Выделяем фрейм для страницы (с флагами ядра и записи)
6057 alloc_frame (page , 0 , 1 );
6158
6259 // Обновляем виртуальный адрес для следующей страницы
6360 virtual_address += PAGE_SIZE ;
6461 }
6562
66- // Теперь нам нужно добавить новую область памяти в список свободных блоков
6763 mem_block_t * new_block = (mem_block_t * )heap_current_end ;
68- new_block -> size = expand_size - sizeof (mem_block_t ); // Учитываем заголовок
64+ new_block -> size = expand_size - sizeof (mem_block_t );
6965 new_block -> is_free = 1 ;
70- new_block -> next = free_blocks ; // Добавляем в начало списка
66+ new_block -> next = free_blocks ;
7167
72- // Обновляем глобальный список свободных блоков
7368 free_blocks = new_block ;
7469
75- // Обновляем текущий конец кучи
7670 heap_current_end += expand_size ;
7771
7872 printf ("Heap expanded successfully. New end: %x\n" , heap_current_end );
7973 return 1 ;
8074}
8175
8276void * kmalloc (u32 size ) {
83- // Выравниваем размер до границы макроса BLOCK_SIZE
8477 if (size % BLOCK_SIZE != 0 ) {
8578 size += BLOCK_SIZE - (size % BLOCK_SIZE );
8679 }
@@ -90,16 +83,10 @@ void* kmalloc(u32 size) {
9083
9184 while (current ) {
9285 if (current -> is_free && current -> size >= size ) {
93- // Нашли подходящий свободный блок: размер текущего больше чем размер
94- // выделяемой памяти плюс размер структуры блока памяти и плюс размер
95- // самого блока
9686 if (current -> size > size + sizeof (mem_block_t ) + BLOCK_SIZE ) {
97- // Можем разделить блок
98- mem_block_t * new_block =
99- (mem_block_t * )((u32 )current + sizeof (mem_block_t ) + size ); // поинтер на новый блок
100- new_block -> size = current -> size - size
101- - sizeof (mem_block_t ); // размер текущего - выделяемый - размер структуры
102- new_block -> is_free = 1 ; // свободен
87+ mem_block_t * new_block = (mem_block_t * )((u32 )current + sizeof (mem_block_t ) + size );
88+ new_block -> size = current -> size - size - sizeof (mem_block_t );
89+ new_block -> is_free = 1 ;
10390 new_block -> next = current -> next ;
10491
10592 current -> size = size ;
0 commit comments