Безопасное использование явного назначения адресов

0

Существует ли наилучшая практика любого типа в отношении безопасного использования явного числа для адреса указателя? Под этим я подразумеваю следующий пример:

#define BASE_ADDRESS  0x10000

typedef struct my_var_list
{
   int var1;
   int var2;
} my_function_list;

my_var_list *MyVars;
MyVars = BASE_ADDRESS;    // Set the address of MyVars to be 0x10000

Это может продемонстрировать некоторое незнание с моей стороны, но как вы можете гарантировать, что 0x10000 не используется кем-то еще в то время, и вы не вызываете повреждение памяти? Если вы не можете предположить, существует ли безопасный способ определения адреса для использования?

  • 0
    Вы очень хорошо можете столкнуться с «Местом записи о нарушении доступа ...». В общем, это не обязательно безопасно и, конечно, не рекомендуется.
  • 1
    Вы не можете надежно сделать это в современной операционной системе.
Показать ещё 6 комментариев
Теги:

2 ответа

5

предполагается, что если вы ЗНАЕТ его 0x10000, тогда вы также знаете, когда это правда. Обычно это относится к аппаратным средствам (я знаю, что порт io 5 находится в 0x10000) или ядро ОС низкого уровня (загрузочный образ загружается на 0x10000 другой частью ядра). Если вы не пишете ни одну из этих вещей, тогда вы не должны делать жестко закодированные адреса

1

Если вы работаете под Windows, функция VirtualAlloc позволяет указать рекомендуемый базовый адрес. Если запрашиваемый регион свободен, VirtualAlloc будет использовать это. Если, однако, регион используется, VirtualAlloc выберет другой базовый адрес.

Для linux (и, возможно, unix) вы можете использовать функцию mmap одинаково - сначала попробуйте ваш адрес, прежде чем выбрать другой.

  • 0
    Попробую это.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню