Выделяется ли память под функции?
Выделяется ли память под функции? Насколько я знаю функция имеет свой адрес, для чего он нужен?
Ответы (1 шт):
Память под функции выделяется. Функции компилируются в набор инструкций процессора. Инструкции хранятся в памяти, процессор читает их и исполняет. Адрес процедуры - адрес первой инструкции скомпилированной функции.
Исключение первое: бывают функции у которых нет кода: например если функция приводит unsinged int к int то с точки зрения процессора ничего делать не нужно - процессоры не различают знаковые и беззнаковые типы.
Исключение второе: компилятор может не вызывать функцию, а встраивать её код в место вызова. На уровне C++ функция есть, с точки зрения процессора функции нет.
Если случилось любое из этих исключений то в скомпилированом коде нельзя будет указать куда именно скомпилировалась функция: она одновременно нигде и везде.
Если в коде C++ вы запросите адрес функции, то вам вернут определённый адрес. Это требование стандарта. Возможно, это будет адрес кусочка кода, который нигде в программе не используется - потому что все вызовы встроились. С таком случае этот кусочек кода исполнится только если вы вызовете его через полученный адрес.