Выделение ненужного буфера [дубликат]

Попробуйте:

var funcs = [];

for (var i = 0; i < 3; i++) {
    funcs[i] = (function(index) {
        return function() {
            console.log("My value: " + index);
        };
    }(i));
}
for (var j = 0; j < 3; j++) {
    funcs[j]();
}

Изменить (2014):

Лично я думаю, что более поздний ответ @ Aust об использовании .bind - лучший способ сделать это сейчас. Также есть _.partial lo-dash / underscore, когда вам не нужно или хотите взаимодействовать с bind thisArg.

3
задан Henri Latreille 12 June 2016 в 13:32
поделиться

3 ответа

Поскольку вы не включили оптимизацию.

Без оптимизации компилятор не пытается свести к минимуму объем пространства или время, в котором он нуждается, для чего-либо в сгенерированном коде - он просто генерирует код в

Добавьте -O2 (или даже просто -O1) или -Os, если вы хотите, чтобы компилятор создавал достойный код.

4
ответ дан Chris Dodd 31 August 2018 в 17:10
поделиться

Компиляторы действительно могут зарезервировать дополнительную память для себя.

У Gcc есть флаг -mpreferred-stack-boundary, чтобы установить выравнивание, которое оно будет поддерживать. Согласно документации значение по умолчанию равно 4, что должно приводить к 16-байтовому выравниванию, которое необходимо для инструкций SSE.

Как VermillionAzure отмечен в комментарии , вы должны предоставить свои параметры версии gcc и времени компиляции (используйте gcc -v, чтобы показать их).

5
ответ дан Community 31 August 2018 в 17:10
поделиться

Мне нужно всего 24 байта.

Компилятору требуется пространство для обратного адреса и базового указателя. Поскольку вы находитесь в режиме 64 бит, это еще 16 байт. Всего 40. Разорвите это до 32-байтной границы, и вы получите 64.

-2
ответ дан user207421 31 August 2018 в 17:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: