Это не ответ, как следствие уже высказанных ответов.
Работа с учеными, хирургами, художниками-графиками и другими, которые должны программировать, но не являются и никогда не станут профессиональными разработчиками программного обеспечения полного времени - я вижу, что макросы легко понятны случайным программистом, в то время как шаблоны, по-видимому, требуют более высокого уровня абстрактного мышления, возможно только при более глубоком и постоянном программировании опыта на C ++. Требуется много примеров работы с кодом, где шаблоны являются полезной концепцией, поскольку концепция имеет смысл достаточно для использования. Хотя это можно сказать о какой-либо языковой функции, объем опыта для шаблонов представляет собой больший разрыв, чем специалист-случайный программист, скорее всего, получит от своей повседневной работы.
Средний астроном или инженер-электроник, вероятно, сталкиваются с макросами просто прекрасно, может даже понять, почему макросов следует избегать, но не будет достаточно шаблонов для повседневного использования. В этом контексте макросы на самом деле лучше. Естественно, существует множество карманов исключений; некоторые физики проводят круги вокруг разработчиков программного обеспечения, но это не типично.
Неиспользуемая память не отображается в адресное пространство процесса. Если вы можете получить доступ к памяти, это означает, что что-то отобразило память, используя mmap (или эквивалент). Если память не используется, вы не можете получить к ней доступ.
В какой-то момент что-то еще в вашем процессе запрашивало память у операционной системы. Как правило, невозможно сказать, что без изучения вашего конкретного процесса. Кандидаты включают в себя:
main
), он, возможно, запросил память для различных целей (подготовка файловых буферов, инициализация пула памяти для malloc
и другие вещи ), в том числе для собственных вычислений. mmap
, возможно, они запросили память. Например, буферы могут создаваться при открытии файлов, printf
подготавливает некоторое рабочее пространство для операций форматирования, которые ему необходимо выполнить, и malloc
требуется дополнительная память для хранения собственной записи, кроме того, что она возвращается к вам. По сути, в памяти происходят разные вещи, кроме тех, которые вы наблюдаете в простом C-коде.