Адрес функции никогда не изменится. Многие программы построены вокруг концепции обратных вызовов, которые не будут работать, если адрес функции может измениться.
Если, гипотетически, местоположение функции изменилось, например, с помощью самоизменяющейся программы, то все вызовы этой функции в любом случае вызовут segfault или очень неопределенное поведение. Edit: Clarification - символы функций похожи на указатели, если вы free
память, на которую указывает указатель, не будут обнулять фактическую переменную-указатель, она все равно будет указывать на нее, так же как ваши вызовы функций по-прежнему будут указывать на старое местоположение перемещенная функция.
Самоизменяющиеся программы являются очень большими исключениями, и в наши дни секция кода двоичного кода защищена от записи, что очень и очень сложно.