Какие значения хранятся в неиспользуемом пространстве памяти?

Это не ответ, как следствие уже высказанных ответов.

Работа с учеными, хирургами, художниками-графиками и другими, которые должны программировать, но не являются и никогда не станут профессиональными разработчиками программного обеспечения полного времени - я вижу, что макросы легко понятны случайным программистом, в то время как шаблоны, по-видимому, требуют более высокого уровня абстрактного мышления, возможно только при более глубоком и постоянном программировании опыта на C ++. Требуется много примеров работы с кодом, где шаблоны являются полезной концепцией, поскольку концепция имеет смысл достаточно для использования. Хотя это можно сказать о какой-либо языковой функции, объем опыта для шаблонов представляет собой больший разрыв, чем специалист-случайный программист, скорее всего, получит от своей повседневной работы.

Средний астроном или инженер-электроник, вероятно, сталкиваются с макросами просто прекрасно, может даже понять, почему макросов следует избегать, но не будет достаточно шаблонов для повседневного использования. В этом контексте макросы на самом деле лучше. Естественно, существует множество карманов исключений; некоторые физики проводят круги вокруг разработчиков программного обеспечения, но это не типично.

1
задан Jonathan Leffler 2 March 2019 в 03:26
поделиться

2 ответа

Неиспользуемая память не отображается в адресное пространство процесса. Если вы можете получить доступ к памяти, это означает, что что-то отобразило память, используя mmap (или эквивалент). Если память не используется, вы не можете получить к ней доступ.

0
ответ дан user3344003 2 March 2019 в 03:26
поделиться

В какой-то момент что-то еще в вашем процессе запрашивало память у операционной системы. Как правило, невозможно сказать, что без изучения вашего конкретного процесса. Кандидаты включают в себя:

  • Когда ваша программа была запущена, загрузчик установил память для вашего кода, постоянных данных, стека и многого другого. Кроме того, процесс, который создал новый процесс для вашей программы (возможно, оболочка командной строки), мог иметь некоторые вещи в памяти, которые сохраняются в процессе выполнения новой программы. (Например, я не уверен, являются ли аргументы командной строки непосредственно унаследованными от родителя или получены кодом запуска, получая их через некоторое межпроцессное взаимодействие.)
  • Хотя код запуска вашей программы был работая (код, который запускается загрузчиком и который устанавливает среду C перед вызовом main), он, возможно, запросил память для различных целей (подготовка файловых буферов, инициализация пула памяти для malloc и другие вещи ), в том числе для собственных вычислений.
  • Если вы вызывали какие-либо процедуры до mmap, возможно, они запросили память. Например, буферы могут создаваться при открытии файлов, printf подготавливает некоторое рабочее пространство для операций форматирования, которые ему необходимо выполнить, и malloc требуется дополнительная память для хранения собственной записи, кроме того, что она возвращается к вам.

По сути, в памяти происходят разные вещи, кроме тех, которые вы наблюдаете в простом C-коде.

0
ответ дан Eric Postpischil 2 March 2019 в 03:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: