Если вдруг у вас уничтожился объект, а кто-то держит на него weak ссылку — вы не можете это отследить. По факту — у вас просто мусорный указатель, при обращении по которому будет ошибка. И это ужасно. Нужно лепить какую-то систему чистки этих самых ссылок.
Сообщение отсылается только при действиях пользователя.
На вопрос из заголовка можно ответить: они размещаются в памяти (в стеке/куче), т.е. грубо говоря вместо имён переменных компилятор подставляет адреса памяти. Но на самом деле оно немного сложнее, т.к. не все операции можно выполнять напрямую с памятью и тогда используются ещё и регистры в качестве промежуточного буфера. Или может оказаться, что в каком-то случае память можно вообще не выделять, а использовать только регистры. Например, такое может произойти с переменной-счётчиком цикла.