@Sasha_88

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

В C# можно написать вот так:
IntPtr ptr = (IntPtr) 0x7ffc329da92c;
Какие есть способы выделить память начиная с этого адреса в неуправляемой куче? Или в управляемой?
Некоторые известные способы (NativeMemory.Alloc, Marshal.AllocHGlobal) выделяют сами и возвращают указатель.
  • Вопрос задан
  • 296 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Гарантированных способов нет. Память по этому адресу может быть уже выделена другой программе. А без гарантий - просто запрашивайте у системы память, пока вам не попадётся нужный блок или память не закончится.
Ответ написан
Vindicar
@Vindicar
RTFM!
Первый вопрос: а на кой тебе это?
Второй вопрос: ты имеешь ввиду логический адрес, или физический?

Если логический, то дёрни функцию WinAPI VirtualAlloc(). Но имей ввиду две вещи:
1. Адрес будет округлён вниз до размера страницы памяти, т.е. твой искомый адрес может оказаться в середине страницы или даже ближе к концу. Возможно, стоит выделить память с запасом.
2. Разумеется, если одна из запрошенных тобой страниц уже занята какой-то памятью, то ничего не поделаешь.

Память по фиксированному физическому адресу для клиентского приложения выделить нереально. Тут скорее нужно драйвер писать.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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