So I have allocated 256 blocks in heap:

```
char* ptr1 = malloc(128);
char* ptr2 = malloc(128);

```

Now after I free ptr2 which I assume currently lies on top of the heap, the program break(the current location of the heap) does not decrease. However if I do another malloc the address returned by malloc is the same as the one that is freed.

So I have the following questions:

When I free a block why does not the program break decrease?
When I call free what exactly happens?How does it keep track of the freed memory so that next time I declare malloc the address is the same?