Да, ОС (или, скорее, библиотека) отслеживает.
Когда вы распределяете память, ОС создает небольшой заголовок вашей памяти, который обычно находится непосредственно перед вашей выделенной памятью, то есть по несколько более низкому адресу на несколько байтов.
При освобождении памяти он берет освобожденный указатель, возвращает несколько байтов и проверяет структуру, которая описывает то, что было фактически выделено, включая размер того, что было выделено.