Пакет GNU binutils содержит программу под названием «размер», которая является самым простым способом получения необходимых данных или, по крайней мере, разумным приближением. Для типичной программы (в данном случае, не маленькой встроенной) вывод может выглядеть следующим образом:
text data bss dec hex filename
332268 2200 19376 353844 56634 test-directory/add
Первые три столбца - это размеры разделов в двоичном файле: «текст» - это исполняемый код, «данные» - это константы и т. Д., В том числе те, которые представляют исходные переменные с явными инициализаторами, а «bss» - это инициализаторы для всего, что неявно статически инициализируется. В типичной встроенной программе эти статические инициализаторы в значительной степени предназначены исключительно для глобальных переменных (и для ваших целей вы, возможно, захотите включить другие статические переменные в ваши измерения, так как они также не находятся в стеке или куче).
Таким образом, я думаю, что вы в итоге получаете сумму «data» и «bss», которая, по сути, является тем, что вы хотите. (После прочтения статьи, с которой связан hlovdal, я менее уверен в этом, чем был; возможно, комментаторы могут добавить подтверждение?)
(После этого «dec» и «hex» - это общий размер всего в десятичном и шестнадцатеричном формате, а «filename», конечно, очевиден.)