2014-01-18 3 views
-1

Хорошо, это может показаться странным, но, пожалуйста, несите меня, я всего лишь новичок. За последние несколько дней я пытался разработать хэш-функцию общего назначения для поддержки ассоциативного массива с хеш-таблицей, используя все лучшие части хеш-функций, таких как RS, JS, ELF e.t.c, чтобы уменьшить хэш-коллизии. но теперь проблема заключается даже в том, чтобы избежать заметного количества столкновений. Мне нужно будет использовать беззнаковые длинные значения с наименьшими 6 знаками, чтобы избежать столкновения.Динамическая инициализация памяти по заданному адресу памяти

Давайте просто предположим, что мне просто нужно сопоставить имена учеников с их метками. Поэтому я поддерживаю целочисленный массив для меток.

Теперь вернемся к моему вопросу.

Идея, о которой я думал, состояла в том, чтобы использовать эти значения как несколько бит младшего разряда фактического адреса памяти, а затем динамически инициализировать память, достаточную для хранения целого числа полученных меток. Этот процесс повторяется для каждой новой добавленной стоимости.

Теперь предполагая, я каким-то образом удалось избежать всех ячеек памяти, которые будут защищены от ОС

Есть ли реальный способ динамически инициализировать память по адресу, мы, как вместо того, чтобы новый оператор в инициализируйте его, а затем верните указатель на это местоположение адреса в C++. (Я использую gcc).

+0

Подробнее о ['std :: map'] (http://en.cppreference.com/w/cpp/container/map). –

+1

для хэш-таблицы использовать ... таблица. ну, массив. как. –

+1

Посмотрите «оператор размещения новый». –

ответ

0

Это зависит от платформы. В системах Unix вы можете попробовать использовать mmap(). Эквивалент Windows - VirtualAlloc(). Но нет гарантии, поскольку адрес может быть уже использован.

+0

Я нашел это сейчас - это может быть полезно http://stackoverflow.com/questions/10364582/can-i-allocate-a-specific-memory-address-using-pointers-in-c – Dinesh

Смежные вопросы