169 похожих чатов

Я тут за тем, чтобы задать вопрос, так как не

знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы (при компиляции подставляют код "функции" в программу), но увеличивают размер программы. Понятно, что в огромные циклы подставлять функции не стоит, но кажется в некоторых иных ситуациях память поважнее.

12 ответов

70 просмотров

Компилятор сам умеет оптимизировать такие моменты

The Bird of Hermes
Компилятор сам умеет оптимизировать такие моменты

а разве процесс при не вызывает функции с длл?

The Bird of Hermes
Компилятор сам умеет оптимизировать такие моменты

Ему еще нужно указывать опции оптимизации ваще-то)

Не сильно дорогая, но и недешёвая. За это можешь в любом случае не волноваться, потому что на С не получится оптимизировать все функции так. А вот на ассемблере конкретно можно сократить вызов GetTickCount, напрямую взяв значение из сегмента системы fs (Windows). Кстати, страшная тайна - внутри системных библиотек плохая оптимизация 😱

Максим-Рябцев Автор вопроса
КТ315
Не сильно дорогая, но и недешёвая. За это можешь в...

Я скорее про собственные функции, а не стандартную библиотеку, так как пишу в том числе под мк. А например со скольки возможных повторений цикла стоит убрать функцию? 1000? 1000000?

Максим Рябцев
Я скорее про собственные функции, а не стандартную...

С любых. Более того, это может также убрать пролог и эпилог внутри цикла, оставив только сохранение счётчика цикла.

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

Максим-Рябцев Автор вопроса
Óðinn
Макросы никак не увеличивают размер исполняемего ф...

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

Максим Рябцев
ну препроцессор заменяет макросы на код макроса, и...

Ну, значит плохая логика программы, раз у тебя код так дублируется

Óðinn
Ну, значит плохая логика программы, раз у тебя код...

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

По сравнению с вычислением косинуса на фпу раз в десять дешевле

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

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
70
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
31
Всем доброго дня, ребят подскажите пожалуйста, если в курсе по ассемблеру используется MASM32, могу ли я использовать FASM? В чем явная разница и будет ли у меня все работать?
Botsman
17
Книга Юрова В.И пойдёт для обучения?
Botsman
24
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
Люди добрые, помогите с идеями, потому что свои закончились. У клиента падает софтина в момент инициализации модуля OtlEventMonitor на RegisterWindowMessage('Gp/OtlTaskEvents/...
Михаил Усков
7
это разве не аналог jvm и той же запускаемой машины на python?
Digital Infinite
10
> Примечательно, что новый владелец удаляет из GitHub любые жалобы, указывающие на подозрительную активность или смену владельца, и, видимо, рассчитывает на то, что пользовате...
Alex Sherbakov
2
И ещё вопрос: можно ли типа как на дос как-то запариться и с помощью прерываний выводить текст, вместо функции printf ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
34
GridView fully ignored first parent(SizedBox), and take width from second parent(Container). How can I constrain GridView by first parent? Widget build(BuildContext context) {...
Hamster
1
Карта сайта