Представьте, что у вас есть класс A со статическим полем int mstatic. Представьте, что этот класс имеет метод mymethod, который изменяет mstatic. При компиляции mymethod, как можно узнать адрес mstatic? Я знаю, что в случае нестатических полей указатель на вызывающий объект (известный «это») неявно передается методу, поэтому он используется для поиска адресов, но как мы это делаем для статических полей?Как компилятор знает, где находятся статические поля?
ответ
Статические поля выделяются аналогично области пространства имен или глобальным переменным ... существует в основном одна или две области (переменные, нуждающиеся в инициализации 0, могут быть отделены от тех, для которых требуются начальные значения, отличные от нуля), последовательно заполненные всеми такими переменными в перевод. Если переменная определена в другой переменной, адрес будет исправлен во время связывания или загрузки. Обратите внимание, что адреса, как правило, эффективно жестко закодированы (фиксированный адрес, возможно, из определенного регистра сегмента данных), в отличие от стека (который может быть относительным регистром стека, но регистр стека изменяется, поскольку функции вызываются и возвращаются, в отличие от регистров сегмента данных который может быть установлен на одно и то же значение во время работы потока) или переменные, размещенные в куче (где адрес определяется во время malloc
или new
.
- 1. Как компилятор знает, где моя основная функция?
- 2. Как компилятор gcc_4.8.1 знает, где искать заголовки?
- 3. Как smake знает, где находятся файлы include и libs?
- 4. -Werror = формат: как компилятор знает
- 5. Строка интернирования. Как компилятор знает?
- 6. Java: где статические поля живут внутри памяти?
- 7. Где находятся поля ввода формы регистрации joomla?
- 8. Как компилятор знает переменные области видимости
- 9. Как компилятор знает, как увеличивать разные указатели?
- 10. Где статические члены находятся в памяти, это постоянное поколение?
- 11. Где находятся сборки Razor?
- 12. как же компилятор знает тип указателя
- 13. Как компилятор знает, что является типом делегата?
- 14. Как компилятор java знает унаследованные методы?
- 15. Как компилятор знает, какой тип возврата
- 16. Интервью: concatenate и дополнение, как компилятор знает
- 17. Flex: Как компилятор знает о зависимостях?
- 18. Как функция-компилятор/интерпретатор знает функцию асинхронную?
- 19. Как загрузчик GRUB2 UEFI знает, где искать файл конфигурации (или где находятся файлы 2-го этапа)?
- 20. Где находятся поля Crystal Reports, установленные в редакции VS 2008?
- 21. Код :: Блоки, где находятся «компиляторы»?
- 22. Где компилятор находит `` printf``?
- 23. Где статические локальные переменные go
- 24. Как Android знает, где взять?
- 25. Java: статические поля переходных процессов
- 26. Препятствовать компилятор знает, что Generic имеет поле
- 27. Как malloc() знает, где начинается куча?
- 28. Где находятся документы Aptana Studio?
- 29. QT4 Как использовать статические поля?
- 30. статические поля getResource
См. также: http://en.wikipedia.org/wiki/Symbol_table –
Это не отличается от поиска глобальных статических переменных или других функций –