Jun. 14th, 2014
Некоторое время назад сделал себе трекер аллокаций в D и обнаружил, что замыкания там реализованы несколько не так, как я ожидал, а довольно остроумным способом. Давайте для примера опишем простую ФВП и попередаем ей из одной функции всякие лямбды, захватывающие разные переменные из окружения, да по нескольку раз :
Теперь вызовем fun(). Как думаете, сколько тут будет сделано аллокаций и сколько всего памяти под них будет запрошено? (компиляем в 32 бита)
( Read more... )
int twice(int delegate(int) f, int x) { return f(f(x)); } void fun() { int x = 10, y = 100; byte[40] arr; double z = 55; foreach(i; 0..3) twice(n => n + arr[8] + x, i).writeln; foreach(i; 10..13) twice(n => n + y++, i).writeln; foreach(i; 20..23) twice(n => n + y + arr[2], i).writeln; }
Теперь вызовем fun(). Как думаете, сколько тут будет сделано аллокаций и сколько всего памяти под них будет запрошено? (компиляем в 32 бита)
( Read more... )