Название не очень понятно, сильно бы растянулось, но я спрашиваю в конкретном контексте — никакого явного перераспределения памяти пользователем не выполняется. Чанк выделяется только один раз, не добавляется или что-то еще, вопрос в том, останется ли его адрес тем же?
Причина, по которой я спрашиваю, заключается в том, что я рассматриваю небольшую оптимизацию для виртуальной машины, когда глобальные данные сначала выделяются, первоначальные вызовы функций сохраняются как смещения от базового указателя, но при первом их выполнении значение кэшируется и Инструкция меняется на прямой вызов, чтобы каждый раз сохранять дополнительные расчеты. Таким образом, эти данные должны сохраняться для того, чтобы оптимизация работала.
Да, в противном случае указатели были бы бесполезны, и для их использования вам понадобился бы механизм блокировки / разблокировки (как в C #, где есть fixed
ключевое слово, которое делает объект неподвижным)
Адрес не изменится. После того, как вы запросили блок памяти из пула памяти, вы можете поэкспериментировать с ним — ОС больше не будет к нему прикасаться, пока вы free
Это.
Если вы посмотрите на realloc
Это забавная функция. Он может «добавить» блок памяти к существующему блоку памяти, если адреса доступны, иначе он найдет новый блок памяти размером s
, Блок памяти после realloc
Инг это не всегда гарантированно будет таким же.
Примечание: если ты malloc
блок памяти размером s
а также free
если вам не гарантированно получить тот же блок памяти, если вы malloc
другой блок того же размера s
,