Есть ли способ узнать, какая часть файла все еще находится в физической памяти после того, как он был прочитан каким-либо процессом - PullRequest
0 голосов
/ 30 апреля 2009

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

Есть ли способ узнать, какие части файла находятся в физической памяти? Есть ли какой-нибудь инструмент, который может это сделать, или, возможно, вызов функции winapi?

Ответы [ 3 ]

2 голосов
/ 30 апреля 2009

Несколько моментов, которые нужно запомнить:

  1. У вас никогда нет прямого доступа к физической памяти. ОС дает вам абстракцию оперативной памяти. Это может быть физическое ОЗУ или виртуальная память, выгруженная на некоторый жесткий диск. Вы никогда не можете знать.
  2. Даже если некоторые биты остаются в некоторой части оперативной памяти (физической или иной), ОС считает этот блок памяти свободным (если только он не был снова занят). Я сомневаюсь, что вы можете получить к нему доступ без какого-либо взлома ОС.

Позвольте мне прояснить мою точку зрения относительно вашего комментария:

Предположим, вы открыли файл, прочитали его в ОЗУ, сделали с ним что-то и закрыли файл, и ваша программа остановилась. Во-первых, я думаю, что мы все согласны с тем, что часть используемой оперативной памяти больше не используется и ОС считается свободной. Это означает, что другая программа, которая приходит и требует некоторой оперативной памяти, может получить этот блок памяти. Итак, во-первых, больше ничего не находится в этом блоке памяти . Оно пустое. Бесплатно для ОС использовать по своему усмотрению.

Теперь, даже если какие-то случайные биты данных остаются в памяти (помните, у вас нет возможности узнать, физические они или нет), у вас нет прямого доступа к ним.

Надеюсь, это прояснится.

0 голосов
/ 01 мая 2009

> сейчас нет инструмента / API для чтения файлового кэша Windows.

Конечно, есть apis (Win32 st)!

0 голосов
/ 30 апреля 2009

, если вы говорите о Windows, содержимое будет в кеше файлов Windows.

сейчас нет инструмента / API для чтения файлового кэша Windows.

Однако вы можете прочитать все содержимое вашей физической памяти по специальному имени, например CreateFile ('\\. \ PhysicalMemory') или по имени \ Device \ PhysicalMemory. (примечание: работает только на XP / 2000)

...