Где это будет храниться, зависит от вашего компилятора и вашей архитектуры. 'a'
- это, как правило, 8-битное значение со значением 97. В зависимости от соглашения о вызовах вашей конкретной архитектуры, оно либо будет помещено в стек, либо перемещено в регистр непосредственно перед вызовом процедуры operator<<(ostream&, char)
. Однако это не имеет ничего общего с сохранением 'a'
в текущей области, но устанавливает значение параметра типа char
в вызываемом объекте; 'a'
никогда не сохраняется в текущей области. Это можно сделать в одной или двух инструкциях по сборке на большинстве архитектур и не требует хранения в статическом сегменте, куче или стеке (если параметры не передаются в стек) - всего несколько битов в одной или двух инструкциях.
Например:
IA-32:
pushl $0x61
pushl ... # address of cout
call ... # address of operator<<(ostream&, char)
MIPS-32:
addiu $a0, $zero, 0x61
addiu $a1, $zero, ... # address of cout
jal ... # address of operator<<(ostream&, char)