Есть ли таблица с синхронизацией (стоимостью) функций C? - PullRequest
1 голос
/ 13 апреля 2010

Предпочтительно для реализации x86-32 gcc

Ответы [ 4 ]

9 голосов
/ 13 апреля 2010

Учитывая, что современный компилятор C оптимизируется как сумасшедший, я думаю, вы обнаружите, что время очень зависит от ситуации. То, что было бы медленной операцией в одной ситуации, может быть либо оптимизировано для более быстрой операции, либо компилятор может использовать более быструю 8 или 16-битную версию той же инструкции и т. Д.

1 голос
/ 13 апреля 2010

Я не думаю, что такое действительно возможно. При рассмотрении разницы во времени для одной и той же программы приводятся разные аргументы. Например, предположим, что функция costOf сделала то, что вы хотели, что стоит больше, memcpy или printf. Оба

costOf(printf("Hello World")) > costOf(memcpy(a, b, 4))
costOf(printf("Hello World")) < costOf(memcpy(a, b, 4 * 1024 * 1024 * 1024))
1 голос
/ 13 апреля 2010

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

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

Некоторые системы реального времени накладывают ограничения на время выполнения операций, но это не относится к C.

0 голосов
/ 13 апреля 2010

ИМХО, это микрооптимизация, которую следует игнорировать, пока не будет выполнено все профилирование . В общем, библиотечные процедуры - это не потребители времени выполнения, а ресурсы или созданные программистом функции.

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

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

Используйте библиотечные функции, которые вам нужны, и не беспокойтесь об их скорости. Используйте сторонние проверенные библиотеки, а не переписывайте собственный код. Если программа выполняется очень медленно, просмотрите дизайн и профиль. Возможно, вы сможете добиться большей скорости, используя Data Oriented Design , а не Object-Oriented Design или процедурное программирование. Опять же, сосредоточьте свои усилия на разработке качественного и надежного кода, одновременно изучая, как создавать программное обеспечение более эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...