Является ли возвращаемое значение malloc виртуальным или физическим адресом? - PullRequest
3 голосов
/ 18 октября 2010

Является ли адрес, возвращаемый функцией malloc, виртуальным адресом или это фактический физический адрес, на котором выделена память?

Edit:

Я где-то читал: «В некоторых реализациях вызов free () освобождает память обратно в систему, а в других - обратно в процесс». Означает ли «освобождение обратно в систему», что память является реальной физической памятью, а «освобождение обратно в процесс» означает, что это виртуальная память?

Ответы [ 3 ]

14 голосов
/ 18 октября 2010

Это адрес действительный в текущем процессе. Виртуальный или физический адрес зависит от базовой платформы.

3 голосов
/ 18 октября 2010

В стандарте C есть понятие нет реальной или виртуальной памяти, поэтому вопрос не имеет смысла.Реализация может делать это по своему усмотрению.

В ОС с виртуальной памятью вы почти наверняка получите виртуальный адрес.В ОС без виртуальной памяти вы, вероятно, этого не сделаете.

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

Вы можете бесплатно предоставить вам список последовательных идентификаторов (1, 2, 3, ...) если он пожелает, при условии, что все ожидаемые операции все еще работают так, как рекламируется.Конечно, это может быть не очень эффективно в нынешних архитектурах, но все еще выполнимо.

0 голосов
/ 18 октября 2010

Единственная причина, по которой я могу думать о том, что вы заботитесь о физическом адресе памяти, - это если вы пытаетесь напрямую общаться с каким-то фрагментом отображенного в памяти оборудования ... в этом случае вам нужнонечто гораздо более металлическое, чем malloc().Вы должны будете использовать интерфейс ядра или драйвера или запретить его, идти за спиной операционной системы, используя что-то вроде /dev/mem UNIX - или, лучше, написать драйвер самостоятельно, чтобы отобразить необходимую физическую память в виртуальную память вашего приложения..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...