Есть ли способ измерить, сколько памяти стека использует функция?
Этот вопрос не относится к рекурсивным функциям; однако мне было интересно узнать, сколько памяти стека займет функция, вызываемая рекурсивно.
Мне было интересно оптимизировать функцию для использования памяти стека; однако, не зная, какие оптимизации уже делает компилятор, остается только гадать, вносит ли он реальные улучшения или нет.
Для ясности, это не вопрос о том, как оптимизировать для лучшего использования стека
Итак, есть ли какой-нибудь надежный способ узнать, сколько памяти стека использует функция в C?
Примечание. Предполагая, что он не использует alloca
или массивы переменной длины, это должно быть возможно найти во время компиляции.
-S
для создания файла сборки из вашего .c файла, который вы можете проверить с любым Текстовый редактор. Другой вариант - использовать отладчик, который показывает код сборки. Таким образом, вы можете пошагово просмотреть код и увидеть, как используются указатель стека и базовый указатель. - person user3386109   schedule 13.02.2015-Wframe-larger-than=###
, чтобы найти предел стека ... Проблема в том, что я хочу применить его к одной функции. И похоже,#pragma GCC diagnostic
не поддерживает-Wframe-larger-than
- person ideasman42   schedule 13.02.2015%ebp
внутри вашей функции и внутри функции, которая вызывается вашей функцией? - person Aasmund Eldhuset   schedule 13.02.2015-Wframe-larger-than
, переместите вашу функцию в отдельный модуль. - person Valeri Atamaniouk   schedule 13.02.2015ulimit -s
, чтобы показать максимальный размер стека, и обычно он будет ‹= 10 МБ, что совсем не велико. однакоulimit -d
показывает максимальный размер кучи, который может быть бесконечным. Мне действительно не совсем понятно, что вы пытаетесь оптимизировать использование стека, поскольку даже если вы потратите на это время, отдача слишком мала, чтобы иметь значение. - person Jason Hu   schedule 13.02.2015-fstack-usage
- хотя вам придется вычислить использование графа вызовов самостоятельно (например, если функция рекурсивная, умножьте ее с количеством рекурсий.) - person nos   schedule 13.02.2015