Адрес памяти объекта остается неизменным в течение его времени жизни? - PullRequest
4 голосов
/ 11 августа 2009

Я не уверен, продолжает ли адрес памяти объекта оставаться неизменным в течение его срока службы. Является ли? Или это иногда меняется за время существования объекта?

Ответы [ 4 ]

5 голосов
/ 11 августа 2009

Да, адрес любого данного объекта является постоянным в Objective-C. Это довольно важно, поскольку объекты всегда указываются по адресу. :-) (Сборщики мусора, которые перемещают вещи и обновляют все указатели на них, существуют, но сборка мусора не поддерживается на iPhone, и сборщик мусора Mac Obj-C задокументирован, чтобы этого не делать - см. Программирование сборки мусора Руководство: Архитектура , в разделе Как работает сборщик мусора.)

0 голосов
/ 27 марта 2010

В Руководстве по программированию сборки мусора Какао я не вижу железной уверенности, что Аруман выше того, что адрес объекта гарантированно постоянен:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/GarbageCollection/Articles/gcArchitecture.html

Раздел закрытых и открытых систем:

'[В открытой системе сбора мусора сборщики] перераспределяют и копируют блоки памяти и обновляют каждый ссылающийся указатель, чтобы отразить новый адрес. [...] Какао-сборщик мусора устанавливает баланс между «закрытым» и «открытым», точно зная, где находятся указатели на отсканированные блоки, где это возможно, легко отслеживая «внешние» ссылки и будучи «консервативным» только там, где это необходимо. .

И, учитывая общую «динамическую» природу среды выполнения Cocoa, я бы хотел действительно развернутого обсуждения этой темы в документации Apple, даже для программы без сбора мусора. Я не нахожу никаких утверждений в духе «адрес памяти объекта гарантированно не изменится» при поиске на всем сайте developer.apple.com - попробуйте Google с помощью:

site:developer.apple.com cocoa "object's memory address" OR "memory address of an object" guaranteed OR permanent

И затем есть этот страшный предмет ... многопоточности (аааа).

0 голосов
/ 11 августа 2009

Хотя я не углубился в вопрос, мои взгляды таковы:

Адреса памяти объекта могут быть не статичными.

Например, в Java объекты не имеют указателей, но имеют ссылки, JVM может перемещаться вокруг объектов как часть своей схемы управления памятью и может изменять ссылочное значение в соответствии с перемещенным объектом. Также объекты могут перемещаться как часть процедуры сборки мусора в JVM.

Хотя я не читал никакой официальной документации по этому вопросу, если вы столкнулись с тем же, вы можете опубликовать это здесь.

Тот же процесс может происходить в .Net.

0 голосов
/ 11 августа 2009

Если вы имеете в виду self, то да, он остается неизменным в течение всего срока службы объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...