Сколько памяти использует функция?

Мне задали этот вопрос в интервью: «Сколько памяти использует функция?». Поэтому я попытался ответить, сказав, что вы можете сложить всю память, занятую всеми переменными данных, структурами данных, которые он создает — например, добавить 4 байта в длину, 1 для символа, 4 для int, 32 бита для указателя на 32 бита система, и добавление любых входов, которые были динамически распределены. Интервьюер не был доволен моим ответом.

Я изучаю C ++, и буду признателен за любые идеи.

4

Решение

С точки зрения статического поведения,
1. Данные, используемые им — сумма всех переменных размеров памяти
2. Размер инструкций — каждая инструкция, написанная внутри функции, будет занимать некоторую память в двоичном виде. Вот как будет определяться размер вашей функции. Это не что иное, как ваш размер скомпилированного кода.
С точки зрения динамического поведения (время выполнения),
1. Память кучи, полученная из-за вызова функции, является памятью функции.

2

Другие решения

Вопрос совершенно неопределенный. Сама функция будет занимать только место для ее запись активации от вызывающего, для параметров и его локальных переменных в стеке. В соответствии с архитектурой запись активации будет содержать такие вещи, как сохраненные регистры, адрес для возврата при вызове функции и т. Д.

Но функция может выделить, сколько памяти ей требуется в куче, поэтому нет точного ответа.

О, кроме того, если функция рекурсивная, то она может использовать много памяти, всегда из-за записей активации, которые необходимы между каждым вызовом.

7

я думаю это руководство по функциональным следам это то, о чем ты говорил. они, вероятно, искали «32/64 бит (целое число), потому что это указатель» …

4

Могу поспорить, что правильный ответ может быть «Не определено». Пустая функция ничего не потребляет.

function func(){}

Цепочка требует больше, чем мы можем реально оценить.

function funcA()
{
funcB();
funcC();
//...
}

Локальный объект, не используемый в его области видимости, будет оптимизирован большинством компиляторов, поэтому он также занимает нулевую память в своем контейнере.

function func()
{
var IamIgnored=0;
//don't do anything with IamIgnored
}

И, пожалуйста, не пропустите выравнивание памяти, поэтому я думаю, что вычисление памяти, используемой объектом или функцией, не может быть просто выполнено путем накопления размеров памяти всех объектов в их областях.

1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector