I know that you have to do it like this:
int * p;
p = new int[10];
//use array
delete [] p;
Now my question is: Since it's not explicitly stated, how is it possible that the correct amount of memory is freed? Do the OS keep track of the allocated memory and its starting address?