На лекции было задание проверить, насколько велики накладные расходы на вызов коротких функций. Жду примеры программ и анализ здесь
Доброго времени суток. Проверил. С функцией сложения. Оказалось примерно в 2 раза медленнее. Ожидал, что в 5 - 8) Вот код:
function add(a, b : integer) : integer;
begin
result := a + b;
end;
begin
var a := 10;
var b := 10;
var c : integer;
MillisecondsDelta;
for var i := 1 to integer.MaxValue do
c := a + b;
writeln(MillisecondsDelta);
for var i := 1 to integer.MaxValue do
c := add(a, b);
writeln(MillisecondsDelta);
end.
Выводил примерно 4800 для нормального сложения и 9500 для функции.
Пардон, что вмешиваюсь. Неужели компилятор не оптимизирует это? Я бы предложил массив случайных чисел для таких экспериментов.
1 лайк
Думаю, имелось ввиду, что a+b
в первом случае не будет в цикле считаться.
Для умножения проверил, в среднем почти в 2 раза медленнее, но с увеличением количества операций разница становится ощутимо меньше.
function prod(a, b: integer): integer;
begin
result := a * b;
end;
begin
var c: integer;
MillisecondsDelta;
for var i := 1 to 100000 do
for var j := 1 to 100000 do
c := i * j;
writeln(MillisecondsDelta);
for var i := 1 to 100000 do
for var j := 1 to 100000 do
c := prod(i, j);
writeln(MillisecondsDelta);
end.
Вот такой результат: 30334 57608