Отдельная инструкция push / pop для пользовательского стека вместо вызова дополнительных функций? - PullRequest
0 голосов
/ 20 января 2012

В стеке процессора нажмите mov, pop и так далее - отдельные инструкции.

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

Можно достичь того же уровня эффективности для динамических объектов времени выполнения вместо использования функций-членов set и get, которые намного длиннее одной машинной инструкции?

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

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

1 Ответ

1 голос
/ 20 января 2012

Похоже, то, что вы пытаетесь сделать, это отказаться от дополнительных call и ret от ваших получателей / установщиков.В этом случае вы можете использовать ключевое слово inline, чтобы сообщить компилятору о включении этой конкретной функции.Другим способом было бы закодировать ваши методы получения / установки, используя макрос-функцию C, если они не слишком сложны.

...