Бекмухаметов Владислав P32121
5 unresolved threads
- Last updated by Vladislav Bekmukhametov
51 return region.addr; 41 42 static void *map_pages(void const *addr, size_t length, int additional_flags) { 43 return mmap((void *) addr, length, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | additional_flags, -1, 0); 44 } 45 46 /* аллоцировать регион памяти и инициализировать его блоком */ 47 static struct region alloc_region(void const *addr, size_t query) { 48 size_t region_size = region_actual_size(size_from_capacity((block_capacity) {query}).bytes); 49 void *mmap_query = map_pages(addr, region_size, MAP_FIXED_NOREPLACE); 50 if (mmap_query == MAP_FAILED) { 51 mmap_query = map_pages(addr, region_size, 0); 52 } 53 void *starting_addr; 54 struct region region; 55 if (mmap_query == MAP_FAILED) { - Last updated by Vladislav Bekmukhametov
35 _free(arr4); 36 munmap(heap, size_from_capacity((block_capacity) {.bytes=HEAP_INIT_SIZE}).bytes); 37 return true; 38 } 39 40 bool test_free_two_block() { 41 void *heap = heap_init(HEAP_INIT_SIZE); 42 void *arr1 = _malloc(100); 43 void *arr2 = _malloc(100); 44 void *arr3 = _malloc(100); 45 void *arr4 = _malloc(100); 46 void *arr5 = _malloc(100); 47 debug_heap(stdout, heap); 48 _free(arr3); 49 _free(arr5); 50 debug_heap(stdout, heap); changed this line in version 2 of the diff
- Last updated by Vladislav Bekmukhametov
16 fprintf(stderr, "%s", "FAILED"); 17 return false; 18 } 19 _free(test); 20 munmap(heap, size_from_capacity((block_capacity) {.bytes=HEAP_INIT_SIZE}).bytes); 21 return true; 22 } 23 24 bool test_free_one_block() { 25 void *heap = heap_init(HEAP_INIT_SIZE); 26 void *arr1 = _malloc(100); 27 void *arr2 = _malloc(100); 28 void *arr3 = _malloc(100); 29 void *arr4 = _malloc(100); 30 debug_heap(stdout, heap); 31 _free(arr3); - Last updated by Vladislav Bekmukhametov
91 struct block_header* block; 142 enum { 143 BSR_FOUND_GOOD_BLOCK, BSR_REACHED_END_NOT_FOUND, BSR_CORRUPTED 144 } type; 145 struct block_header *block; 92 146 }; 93 147 94 148 95 static struct block_search_result find_good_or_last ( struct block_header* restrict block, size_t sz ) { 96 /*??? */ 149 static struct block_search_result find_good_or_last(struct block_header *restrict block, size_t sz) { 150 struct block_search_result result = {.block = block, .type = BSR_CORRUPTED}; 151 if (block == NULL) { 152 return result; 153 } 154 result.type = BSR_REACHED_END_NOT_FOUND; changed this line in version 2 of the diff
- Last updated by Vladislav Bekmukhametov
209 void *_malloc(size_t query) { 210 struct block_header *const addr = memalloc(query, (struct block_header *) HEAP_START); 211 if (addr) return addr->contents; 212 else return NULL; 213 } 214 215 static struct block_header *block_get_header(void *contents) { 216 return (struct block_header *) (((uint8_t *) contents) - offsetof( 217 struct block_header, contents)); 218 } 219 220 void _free(void *mem) { 221 if (!mem) return; 222 struct block_header *header = block_get_header(mem); 223 header->is_free = true; 224 while (true) { changed this line in version 2 of the diff