Все ваши переменные имеют автоматическую область действия. Они исходят из «стека», поскольку переменные перестают действовать после возвращения функции.
Именованные функциональные переменные никогда не могут исходить из «кучи» в том смысле, что вы имеете в виду. Память для именованной функциональной переменной всегда привязана к области функций (или самой внутренней области блока внутри функции, в которой объявлена переменная).
Переменной может быть присвоено значение, полученное malloc()
или аналогичная функция динамического распределения. Затем переменная указывает на объект, который существует в «куче». Однако, указанная переменная указателя сама по себе равна не в «куче».
Иногда сам «стек» динамически выделяется. Например, для потока. Затем память, используемая для выделения локальных переменных функции, работающих внутри этого потока, находится в «куче». Однако сами переменные все еще автоматические, поскольку они недействительны после возвращения функции.
Поскольку динамического распределения нет, вопрос в том, являются ли эти переменные объявленными в теле функции или в файловой/глобальной области? – jxh
код был изменен, чтобы иметь смысл – answerSeeker
Любопытный, какой у вас прецедент? –