Я спрашиваю, что именно происходит в памяти?
Локальные переменные размещаются в стеке.
Константы, включая строковые литералы, размещаются в разделах текста или данных исполняемого файла.
Разве переменная-указатель 's' не является локальной переменной?
Да
или где указатель переменной хранится в памяти?
Локальный s
находится в регистре или в стеке.
Также, где текстовая константа "Hello, World" хранится в памяти?
В разделе .text или .data. Это константа, но старый код иногда изменяет их, поэтому это зависит от параметров компилятора. Вам нужно различать ссылку и объект, чтобы понять все это.
(не считается ли это локальной переменной, которая недоступна после возврата из функции)?
Хорошо, s
локально, но сама строка будет требоваться каждый раз, когда вызывается функция, и локальный фрейм даже не будет существовать, пока это не произойдет, поэтому сама константа, скорее всего, хранится в разделе .text. , Он может храниться в .data, в зависимости от параметров компилятора и того, насколько текущая версия компилятора заботится о компиляции устаревшего кода. Литерал внутри выражения является чем-то совершенно отличным от переменной, которой он назначается.
В основном, какие переменные / данные считаются находящимися в «локальной» области функций (перестает быть доступным после возврата функции)?
Те, которые лексически определены как переменные auto
, то есть объявлены внутри функций без класса хранения static
. Слово accessible
, к сожалению, немного неточно. Со статическим классом хранения на объект можно ссылаться, если его адрес был вытек из функции.