|
@@ -39,21 +39,19 @@
|
|
|
* @param ptr The pointer of the memory block to be freed.
|
|
|
*/
|
|
|
void bitmap_free(bitmap_rb_t *raw_block, void *ptr) {
|
|
|
+ BMAP_EL_TYPE *bmap_p;
|
|
|
chunk_header_t *chunk_header;
|
|
|
size_t cells_used, cell_no;
|
|
|
- BMAP_EL_TYPE *bmap_p;
|
|
|
|
|
|
+ bmap_p = (BMAP_EL_TYPE *)((uintptr_t) raw_block + sizeof(bitmap_rb_t));
|
|
|
chunk_header = (chunk_header_t *)((char *)ptr - CHUNK_HDR_SIZE);
|
|
|
|
|
|
cells_used = chunk_header->num_of_cells;
|
|
|
|
|
|
- cell_no = (size_t) ((char *)chunk_header -
|
|
|
- ((char *)raw_block + sizeof(bitmap_rb_t) +
|
|
|
- raw_block->elements * BMAP_EL_SIZE))
|
|
|
+ cell_no = (size_t) ((uintptr_t) chunk_header - (uintptr_t) bmap_p -
|
|
|
+ raw_block->elements * BMAP_EL_SIZE)
|
|
|
/ raw_block->bytes_per_cell;
|
|
|
|
|
|
- bmap_p = (BMAP_EL_TYPE *)((char *)raw_block + sizeof(bitmap_rb_t));
|
|
|
-
|
|
|
size_t mask_counter = cells_used;
|
|
|
size_t mask_start = cell_no % BMAP_EL_SIZE_BITS + 1;
|
|
|
size_t vector_index = cell_no / BMAP_EL_SIZE_BITS;
|