Определения n функций может быть не так просто, как вы считаете. В частности, функции в исходном коде C не соответствуют функциям в сгенерированном коде сборки, особенно из-за встроенных функций.
Количество и размер функций зависят от уровня оптимизации и компилятора.
И многие заголовки (например, <stdio.h>
) могут содержать встроенные функции. Если они не вызываются, компилятор, вероятно, будет оптимизирован, не испуская свой код (и то же самое может быть правдой с некоторыми статическими функциями). Довольно часто функции, объявленные static inline
, не отображаются в оптимизированном коде.
Кроме того, некоторые макросы могли бы быть расширены в некоторые определения функций ....
Если компиляция с достаточно свежей версией GCC (например, 4.7 или более поздней версией), вы могли бы сделать простую MELT расширения для этой цели. Самое большое преимущество заключается в том, что он работает внутри GCC, поэтому будет действительно подсчитывать, что делает GCC ... (например, после некоторых оптимизаций).
Обратите внимание, что GCC может генерировать или удалить некоторые функции во время оптимизации (function cloning, function inlining ....)
Очередной выпуск РАСПЛАВА обеспечит такие измерения
Я уверен, что ваш код вызова функции из стандартной библиотеки C (например, 'printf' ...), так что вам есть по крайней мере, одна внешняя библиотека, стандартная C ... –
Ну, на самом деле вы не можете быть уверены в этом. Это сложный вычислительный механизм, и системные вызовы преднамеренно опущены, когда это возможно. Даже если есть некоторые, это похоже на 5 против 2000, так что это не имеет большого значения. – mszabc
Но 'printf' не является системным вызовом. Моя точка зрения состоит в том, что переносимый C-код приложения (а не свободностоящий), который не использует стандартную библиотеку, бесполезен (если он не использует другие библиотеки), потому что он не может делать никаких ввода или вывода ... –