ОК, чтобы быть более конкретным, обычно то, что происходит (специфично для ОС, но AFAIK, это универсально, возможно, где-то в спецификации), это то, что где-то в наборе команд вашего исполняемого файла находятся строки "ABC" и "CBA "- они встроены в вашу программу. Когда вы делаете str="ABC"
, вы говорите: «Я хочу, чтобы этот строковый указатель указывал на адрес в моей скомпилированной программе, который содержит строку ABC ». Вот почему существует разница между «строками» во время выполнения и «строковыми литералами», если вы видите это в документации где-либо. Поскольку вы не выделяли место для своего литерала - компилятор запек его в вашу программу - вам не нужно выделять для него место.
В любом случае, когда ваш процесс выгружается, ОС освобождает этот ресурс как естественный побочный эффект выгрузки вашей программы. На самом деле, в общем случае невозможно пропустить после выхода из программы, поскольку ОС будет освобождать любые ресурсы, которые вы забудете, даже чудовищные утечки, при выходе из программы . (это не совсем так - вы можете вызвать утечку другой программы, которая не выгружена, если вы делаете связанное с библиотекой - но это достаточно близко). Это всего лишь одна из тех вещей, о которых заботится ОС.