Что встраивает?

Вы могли попытаться использовать слушателей события JavaScript.

Они выполняют код на ответе, чтобы возразить появлению событий (такому как загрузка страницы)

, Например, выполнить код на загрузке страницы:

window.addEventListener('load', function () 
{
    /* code goes here */
}
25
задан Community 23 May 2017 в 10:31
поделиться

9 ответов

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

Встраивание решает проблему производительности и ремонтопригодности, позволяя объявить функцию как inline (по крайней мере, в C ++), чтобы при вызове этой функции вместо того, чтобы ваше приложение прыгало по время выполнения - код во встроенной функции вводится во время компиляции каждый раз, когда вызывается данная функция.

41
ответ дан 28 November 2019 в 18:17
поделиться

http://en.wikipedia.org/wiki/Inlining

В вычислениях встроенное расширение или встраивание - это оптимизация компилятора, которая заменяет сайт вызова функции телом вызываемый. Эта оптимизация может улучшить использование времени и пространства во время выполнения, возможно, за счет увеличения размера окончательной программы.

13
ответ дан 28 November 2019 в 18:17
поделиться

Как разработчику Java, вам обычно не нужно беспокоиться о встраивании методов. Компилятор Java Just-in-time может и будет делать это автоматически в большинстве мест, где это имеет смысл.

IDE, такие как eclipse, могут иметь функцию, которая позволяет вам встраивать методы на уровне исходного кода - никогда сделайте это для повышения производительности, только для удобства чтения кода (например, когда вы понимаете, что метод просто вызывает еще один метод, не добавляя ничего полезного).

8
ответ дан 28 November 2019 в 18:17
поделиться

Как уже упоминалось в других ответах, встраивание требует затрат . Обычно это считается малым, однако при фактическом измерении вы можете быть удивлены и узнаете, что это может быть больше, чем то, что вы получаете (так что то, что говорят другие люди, верно: не оптимизируйте, если вы не измерили). 1285]. Стоит отметить, что в ядре Linux они начали отключать изначально встроенные функции некоторое время назад, потому что стоимость была слишком высокой (более крупные функции потребляли больше кеш-памяти процессора, и возникающие промахи в кеше были дороже, чем простой вызов функция, которая должна была быть встроена). См. «Глава 15: Внутренняя болезнь» в doc / Documentation / process / coding-style.

2
ответ дан 28 November 2019 в 18:17
поделиться

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

0
ответ дан 28 November 2019 в 18:17
поделиться

По сути, в C / C ++ компилятор может встраивать функции, что означает, что вместо того, чтобы выполнять вызов функции для выполнения этой операции, код будет добавлен в блок вызывающей функции, поэтому он будет так, как если бы это никогда не было отдельным вызовом функции.

Это будет более подробно: http://www.codersource.net/cpp_tutorial_inline_functions.html

0
ответ дан 28 November 2019 в 18:17
поделиться

Ответы на оптимизацию компилятора верны. Однако есть и другое использование - в рефакторинге под встраиванием понимается замена вызова метода телом метода и последующее удаление метода. См. Встроенный метод . Существуют аналогичные рефакторинги, такие как Inline Class .

EDIT: Обратите внимание, что рефакторинг выполняется вручную или с помощью инструмента; в любом случае это предполагает изменение исходного кода.

0
ответ дан 28 November 2019 в 18:17
поделиться

Встроенные функции обычно используются в файлах заголовков C ++, а не Java. Заголовочный файл C ++ обычно не содержит реализованного кода и считается интерфейсом для файла cpp с тем же именем, который обычно содержит реализованный код. Допустимо включать встроенную функцию в файл заголовка, обычно это небольшая облегченная функция. Встроенные функции имеют свою цену, поэтому они не должны быть большими операциями с интенсивным использованием памяти. Для небольших подпрограмм снижение производительности минимально, и они больше используются для удобства.

0
ответ дан 28 November 2019 в 18:17
поделиться

В этом обсуждении Джон Скит упоминает Client jvm (hotspot) v Server jvm с улучшениями производительности, доступными во время выполнения, если JIT-компилятору (JIT-компилятору) разрешено использовать время -основанные улучшения. Это «как это делается» в Java.

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

. Сегодня синглтон является предметом многостраничных обсуждений, и развертывание цикла, а также что-то вроде встраивания несколько удалено из их исходного контекста (s). Вы можете прочитать очень информированную работу Дова Булки по этому вопросу, чтобы узнать, как C / C ++ взяли ее на себя. Что касается Java, изучение его богатой библиотеки в java.util будет лучше удовлетворять ваши потребности, чем изучение проблем с встраиванием и глубоким компилятором - вы можете увязнуть в укоренившейся внутренней войне в структурах данных, которые затушевывают вызовы в 16-битный код, и не прекращайте свое обучение.

Вы можете сделать instanceof на Java, который похож на vf-таблицу (ребята, пожалуйста), но думайте об этом, как если бы вы писали на строго типизированном языке - и теперь будет писать на языке, где строка может легко сбежать, ковыряясь там, где ей нечего делать. Недавно я попытался написать код, который создает изображение на Java, делая это из кода C. Вскоре я обнаружил, что смотрю на таблицу oxr в поисках надежного шифрования - это не имеет ничего общего с кодом, который я писал.

Как бы вы написали строковый класс на C / C ++, который имеет небольшой буфер для строк размером менее 32 байтов и перехватывает указатели, чтобы они оперировали только строкой?

Не пытаясь дразнить вас или что-то в этом роде, это просто действительно хорошее место для начала, а не встраивание и компилятор.

-1
ответ дан 28 November 2019 в 18:17
поделиться
Другие вопросы по тегам:

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