Выделяется ли память под функции?

Выделяется ли память под функции? Насколько я знаю функция имеет свой адрес, для чего он нужен?


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Память под функции выделяется. Функции компилируются в набор инструкций процессора. Инструкции хранятся в памяти, процессор читает их и исполняет. Адрес процедуры - адрес первой инструкции скомпилированной функции.

Исключение первое: бывают функции у которых нет кода: например если функция приводит unsinged int к int то с точки зрения процессора ничего делать не нужно - процессоры не различают знаковые и беззнаковые типы.

Исключение второе: компилятор может не вызывать функцию, а встраивать её код в место вызова. На уровне C++ функция есть, с точки зрения процессора функции нет.

Если случилось любое из этих исключений то в скомпилированом коде нельзя будет указать куда именно скомпилировалась функция: она одновременно нигде и везде.

Если в коде C++ вы запросите адрес функции, то вам вернут определённый адрес. Это требование стандарта. Возможно, это будет адрес кусочка кода, который нигде в программе не используется - потому что все вызовы встроились. С таком случае этот кусочек кода исполнится только если вы вызовете его через полученный адрес.

→ Ссылка