Вы не правы.
Адрес виртуальной памяти функции в главном исполняемом файле является абсолютным, адрес физической памяти может даже измениться во время работы функции (если ОС заменяет процесс).
Для библиотек виртуальный адрес может быть абсолютным или относительным. Если он относительный, он называется «позиционно-независимым кодом» и полезен, если библиотека не может загружаться по предпочтительному адресу.
Код не помещается в стек. Локальные (автоматическая длительность) переменные обычно есть, что означает отдельные копии для одновременных и рекурсивных / реентерабельных вызовов. Поскольку код доступен только для чтения, наличие нескольких потоков, обращающихся к одному и тому же адресу, не составляет проблем.
Языки JITted определяют адрес каждой функции во время выполнения, во время преобразования из промежуточного языка (такого как байт-код Java) в машинный код.
Функции также не хранятся внутри объектов. Часто объект имеет указатель на массив указателей на функции для поддержки полиморфизма (это называется виртуальными функциями). Эти указатели функций доступны относительно объекта, но конечный адрес кода является абсолютным (опять же, только виртуальный адрес).
И если функция встроена, то она может существовать только как части, смешанные с другими функциями.