Есть ли гарантия, что выделенный в куче адрес блока не изменится (неявно)?

Название не очень понятно, сильно бы растянулось, но я спрашиваю в конкретном контексте — никакого явного перераспределения памяти пользователем не выполняется. Чанк выделяется только один раз, не добавляется или что-то еще, вопрос в том, останется ли его адрес тем же?

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

0

Решение

Да, в противном случае указатели были бы бесполезны, и для их использования вам понадобился бы механизм блокировки / разблокировки (как в C #, где есть fixed ключевое слово, которое делает объект неподвижным)

2

Другие решения

Адрес не изменится. После того, как вы запросили блок памяти из пула памяти, вы можете поэкспериментировать с ним — ОС больше не будет к нему прикасаться, пока вы free Это.

Если вы посмотрите на reallocЭто забавная функция. Он может «добавить» блок памяти к существующему блоку памяти, если адреса доступны, иначе он найдет новый блок памяти размером s, Блок памяти после reallocИнг это не всегда гарантированно будет таким же.

Примечание: если ты malloc блок памяти размером s а также free если вам не гарантированно получить тот же блок памяти, если вы malloc другой блок того же размера s,

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector