[質問]

C言語で、

int *buf;
buf = (int *)calloc(100,sizeof(int));

として確保したメモリは、

free(buf);

で開放しますが、このとき開放されるのは確保したメモリすべてなのでしょうか?
確保したメモリのうち、一部分だけ開放することはできないのでしょうか?
初心者なものですから、メモリ確保とかよく理解してないのですが、
どなたか分かりやすく説明していただけないでしょうか。 よろしくお願いします。